Matplotlib 散点图
创建散点图
应用 Pyplot 库, 您可以使用 scatter()
函数来绘制散点图.
scatter()
函数为每次观察绘制一个点。它需要两个长度相同的数组,一个用于 x 轴上的值,另一个用于 y 轴上的值:
实例
一个简单的散点图:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
上面例子中的观察结果是 13 辆汽车经过的结果。
X 轴显示汽车的使用年限。
Y 轴显示汽车通过时的速度。
观察结果之间有什么关系吗?
看起来车越新,开得越快,但这可能是巧合,毕竟我们只登记了 13 辆车。
比较绘图
在上面的例子中,速度和年龄之间似乎有关系,但是如果我们也绘制另一天的观察结果呢?散点图会告诉我们其他的事情吗?
实例
在同一个的图形种进行两个绘图:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
注意:这两个图以两种不同的颜色绘制,默认为蓝色和橙色,您将在本章后面学习如何更改颜色。
通过比较这两个图,我们可以肯定地说,它们都给了我们相同的结论:车越新,开得越快。
颜色
您可以使用 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
参数。实例
设置您自己的标记颜色:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
ColorMap 色度图
Matplotlib 模块有许多可用的ColorMap。
ColorMap 类似于颜色列表,其中每种颜色的值范围为 0 到 100。
以下是 ColorMap 的示例:
这个 ColorMap 称为 "viridis" ,可以看到它的范围从 0(紫色)到 100(黄色)。:
如何使用 ColorMap
您可以使用关键字参数 cmap
和 colormap 的值指定 colormap ,在这种情况下,viridis
是 Matplotlib 中可用的内置 colormap 之一。
此外,还必须创建一个具有值(从 0 到 100 )的数组,散点图中的每个点对应一个值:
实例
创建颜色数组,并在散点图中指定 colormap:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
通过包含 plt.colorbar()
语句,可以在图形中包含 colormap:
实例
包含实际的 colormap:
import sys
import matplotlib
matplotlib.use('Agg')
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.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
可用的 ColorMap
您可用选择任何内置的 ColorMap:
颜色 | 反色 | |||
---|---|---|---|---|
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 轴数组的长度相同:
实例
为标记设置自己的大小:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
透明度
您可以使用 alpha
参数调这些点的透明度。
与颜色一样,请确保大小数组的长度与 x 轴和 y 轴数组的长度相同:
实例
为标记设置自己的大小和透明度:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
结果:
结合颜色大小和透明度
您可以在点上组合不同大小的 colopmap。如果圆点是透明的,则最好将其可视化:
实例
为 x 点、y 点、颜色和大小创建具有100个值的随机数组:
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
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()
#Two lines to make our compiler able to draw:
plt.savefig(sys.stdout.buffer)
sys.stdout.flush()