Matplotlib散布図
散布図の作成
Pyplotを使用すると、このscatter()
関数を使用して散布図を描くことができます。
このscatter()
関数は、観測ごとに1つのドットをプロットします。同じ長さの2つの配列が必要です。1つはx軸の値用で、もう1つはy軸の値用です。
例
単純な散布図:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
結果:
上記の例の観察結果は、13台の車が通過した結果です。
X軸は、車の古さを示しています。
Y軸は、通過するときの車の速度を示します。
観察の間に何か関係はありますか?
車が新しいほど速く走れるようですが、それは偶然かもしれません。結局、登録した車は13台だけでした。
プロットを比較する
上記の例では、速度と年齢の間に関係があるように見えますが、別の日の観測値もプロットするとどうなりますか?散布図は私たちに何か他のことを教えてくれますか?
例
同じ図に2つのプロットを描きます。
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
結果:
注: 2つのプロットは、デフォルトでは青とオレンジの2つの異なる色でプロットされます。この章の後半で、色を変更する方法を学習します。
2つのプロットを比較すると、どちらも同じ結論が得られていると言っても過言ではありません。車が新しいほど、運転速度は速くなります。
色
color
またはc
引数を使用して、散布図ごとに独自の色を設定できます
。
例
マーカーの独自の色を設定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
結果:
各ドットに色を付ける
c
引数の値として色の配列を使用することにより、各ドットに特定の色を設定することもでき
ます。
注:これには引数を使用できません。引数color
のみを使用できc
ます。
例
マーカーの独自の色を設定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
結果:
ColorMap
Matplotlibモジュールには、利用可能なカラーマップがいくつかあります。
カラーマップは色のリストのようなもので、各色の値は0〜100の範囲です。
カラーマップの例を次に示します。
このカラーマップは「viridis」と呼ばれ、ご覧のとおり、紫色の0から黄色の100までの範囲です。
ColorMapの使用方法
カラーマップの値を使用してキーワード引数
cmap
を使用してカラーマップを指定できます。この場合'viridis'
は、Matplotlibで使用可能な組み込みのカラーマップの1つです。
さらに、値(0から100)を使用して配列を作成する必要があります。これは、散布図の各ポイントに1つの値です。
例
カラー配列を作成し、散布図でカラーマップを指定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
結果:
plt.colorbar()
次のステートメントを含めることにより、図面にカラーマップを含めることができます。
例
実際のカラーマップを含めます。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
結果:
利用可能なカラーマップ
組み込みのカラーマップのいずれかを選択できます。
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
サイズ
s
引数を使用してドットのサイズを変更でき
ます。
色と同じように、サイズの配列がx軸とy軸の配列と同じ長さであることを確認してください。
例
マーカーに独自のサイズを設定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes)
plt.show()
結果:
アルファ
alpha
引数を使用してドットの透明度を調整でき
ます。
色と同じように、サイズの配列がx軸とy軸の配列と同じ長さであることを確認してください。
例
マーカーに独自のサイズを設定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
結果:
カラーサイズとアルファを組み合わせる
ドットのサイズが異なるカラーマップを組み合わせることができます。これは、ドットが透明である場合に最もよく視覚化されます。
例
xポイント、yポイント、色、サイズの値が100のランダム配列を作成します。
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
結果: