実体と情報のはざま

何事にも囚われず。

PythonでPyplotの散布図(scatter)を描いてみた。

 今回はもっとグラフを使いこなしたいと思い、散布図に特化して色々やってみた。
決められる項目が多すぎてタイヘン!
 散布図に深入りしてみたら…設定可能な項目の多さに圧倒された。。色々試してみたかったが、マーカーの形状だけでおなか一杯でした。。
今回作ってみたのは、①カラーマップを使う散布図 ②カラーマップを使わない散布図 の関数づくりがメイン。これらをコピペして今後のプログラミングに役立てようと思って。ただ、選択可能なカラーマップの種類とマーカーの形状を欲張りすぎてザワザワしている。カラーマップや形状をリストに入れて、数値で指定することで選択する仕組み。
開発環境:Spyder(Python 3.6)

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

def graph_scatter(x,y,color,marker,size):
    markers = ['.', ',', 'o', 'v', '^', '<', '>', '1', '2', '3',#0-9
               '4', '8', 's', 'p', '*', 'h', 'H', '+', 'x', 'D',#10-19
               'd', '|', '_', 'P', 'X', 0, 1, 2, 3, 4,#20-29
               5, 6, 7, 8, 9, 10, 11, 'None']#30-37
    colors=['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']
    plt.scatter(x, y,#座標
                s=size,#サイズ
                c=colors[color],#色
                marker=markers[marker],#形
                alpha=0.5,#0~1で指定 0が透明
                )
    plt.title("Title")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.grid(False)
    plt.show()

def graph_scatter_colormap(x,y,color,cms,marker,size):
    cmaps = ['viridis','plasma','inferno','magma','Greys',#0-4
             'Purples','Blues','Greens','Oranges','Reds',#5-9
             'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu',#10-14
             'BuPu','GnBu','PuBu','YlGnBu','PuBuGn',#15-19
             'BuGn', 'YlGn','binary', 'gist_yarg', 'gist_gray',#20-24
             'gray', 'bone', 'pink','spring', 'summer', #25-29
             'autumn', 'winter', 'cool', 'Wistia','hot',#30-34
             'afmhot', 'gist_heat', 'copper', 'PiYG', 'PRGn',#35-39
             'BrBG', 'PuOr', 'RdGy', 'RdBu',  'RdYlBu',#40-44
             'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic',#45-49
             'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2',#50-54
             'Set1', 'Set2', 'Set3', 'tab10', 'tab20', #55-59
             'tab20b', 'tab20c', 'flag', 'prism', 'ocean',#60-64
             'gist_earth','terrain','gist_stern','gnuplot','gnuplot2', #65-69
             'CMRmap', 'cubehelix', 'brg', 'hsv', 'gist_rainbow',#70-74
             'rainbow', 'jet', 'nipy_spectral', 'gist_ncar']#75-78
    markers = ['.', ',', 'o', 'v', '^', '<', '>', '1', '2', '3',#0-9
               '4', '8', 's', 'p', '*', 'h', 'H', '+', 'x', 'D',#10-19
               'd', '|', '_', 'P', 'X', 0, 1, 2, 3, 4,#20-29
               5, 6, 7, 8, 9, 10, 11, 'None']#30-37
    plt.scatter(x, y,#座標
                s=size,#サイズ
                cmap=plt.get_cmap(cmaps[cms]),#カラーマップ
                c=color,#色
                marker=markers[marker],#形
                alpha=0.5,#0~1で指定 0が透明
                )
    plt.title("Title")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.grid(False)
    plt.colorbar()
    plt.show()

N = 1000
x = np.random.rand(N)
y = np.random.rand(N)
colors1=0
colors2 = np.random.rand(N)
colormaps=63
markers=14
size=200

fig1=plt.figure(1)
graph_scatter(x,y,colors1,markers,size)

fig2=plt.figure(2)
graph_scatter_colormap(x,y,colors2,colormaps,markers,size)

結果は、こんな感じ。
まずは、カラーマップを使わないやつ。
f:id:myuteru:20170514000528p:plain 
次に、カラーマップを使うやつ。
f:id:myuteru:20170514000555p:plain
今回は関数の定義が目的だから特に独自性もなくありふれた結果です。。
Pythonをはじめてから一週間くらいだけど、だんだん慣れてきた。ただ、プログラミングはあくまで手段であって、私の目的はデータサイエンスを使いこなすこと。今回は仕様自体に凝り過ぎてしまったので、ちょい反省。
今日は、ここまで!