Matplotlib使用自定义颜色绘制统计图

简介: matplotlib 提供的所有绘图都带有默认样式,但有时可能需要自定义绘图的颜色和样式,以对绘制更加精美、符合审美要求的图像。

前言

matplotlib 提供的所有绘图都带有默认样式。虽然这可以进行快速绘图,但有时可能需要自定义绘图的颜色和样式,以对绘制更加精美、符合审美要求的图像。matplotlib 的设计考虑到了此需求,可以很容易调整 matplotlib 图形的颜色和样式。  

自定义颜色

在生活中,我们可能对色彩的搭配与审美有自己的偏好,因此,我们可能希望 matplotlib 遵循自定义的颜色方案,以便所绘制的图形更好地适合文档或网页。

matplotlib 中有多种定义颜色的方法,常见的方法包括:

1.  三元组 (Triplets):颜色可以描述为一个实数三元组,即颜色的红、蓝、绿分量,其中每个分量在 [0,1] 区间内。因此,(1.0, 0.0, 0.0) 表示纯红色,而 (1.0, 0.0, 1.0) 则表示粉色。

2. 四元组 (Quadruplets):它们前三个元素与三元组定义相同,第四个元素定义透明度值。此值也在 [0,1] 区间内。将图形渲染到图片文件中时,使用透明颜色可以使绘制图形与背景进行混合。

3. 预定义名称:matplotlib 将标准 HTML 颜色名称解释为实际颜色。例如,字符串 red 即可表示为红色。同时一些某些颜色的具有简洁的别名,如下表所示:

别名

颜色

b

blue

g

green

r

red

c

cyan

m

magenta

y

yellow

k

black

w

white

4. HTML 颜色字符串:matplotlib 可以将 HTML 颜色字符串解释为实际颜色。这些字符串被定义为 #RRGGBB,其中 RR、GG 和 BB 是使用十六进制编码的红色、绿色和蓝色分量。

5. 灰度字符串:matplotlib 将浮点值的字符串表示形式解释为灰度,例如 0.75 表示中浅灰色。

使用自定义颜色绘制曲线图

通过设置 plt.plot() 函数的参数 color (或等效的简写为 c ),可以设置曲线的颜色,如下所示:

importnumpyasnpimportmatplotlib.pyplotaspltdefpdf(x, mu, sigma):
a=1./ (sigma*np.sqrt(2.*np.pi))
b=-1./ (2.*sigma**2)
returna*np.exp(b* (x-mu) **2)
x=np.linspace(-6, 6, 1000)
foriinrange(5):
samples=np.random.standard_normal(50)
mu, sigma=np.mean(samples), np.std(samples)
plt.plot(x, pdf(x, mu, sigma), color=str(.15*(i+1)))
plt.plot(x, pdf(x, 0., 1.), color='k')
plt.plot(x, pdf(x, 0.2, 1.), color='#00ff00')
plt.plot(x, pdf(x, 0.4, 1.), color= (0.9,0.9,0.0))
plt.plot(x, pdf(x, 0.4, 1.), color= (0.9,0.9,0.0,0.8))
plt.show()

绘图31.png

使用自定义颜色绘制散点图

可以以同样的方式像控制曲线图一样控制散点图的颜色。有两种可用的形式:

1. 为所有点使用相同的颜色 :所有点都将以相同的颜色显示。

2. 为每个点定义不同的颜色:为每个点提供不同的颜色。

为所有点使用相同的颜色  

利用从二元高斯分布中提取的两组点 y_1 和 y_2,每一组中点的颜色相同:

importnumpyasnpimportmatplotlib.pyplotasplty_1=np.random.standard_normal((150, 2))
y_1+=np.array((-1, -1)) # Center the distrib. at <-1, -1>y_2=np.random.standard_normal((150, 2))
y_2+=np.array((1, 1)) # Center the distrib. at <1, 1>plt.scatter(y_1[:,0], y_1[:,1], color='c')
plt.scatter(y_2[:,0], y_2[:,1], color='b')
plt.show()

绘图32.png

为每个点定义不同的颜色

我们总会遇到这样的绘图场景,需要为不同类别的点使用不同的颜色进行绘制,以观察不同类别间的差异情况。以Fisher's iris数据集为例,其数据集中数据类似如下所示:

5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolo

数据集的每个点都存储在以逗号分隔的列表中。最后一列给出每个点的标签(标签包含三类:Iris-virginica、Iris-versicolor 和 Iris-Vertosa)。在示例中,这些点的颜色将取决于它们的标签,如下所示:

importnumpyasnpimportmatplotlib.pyplotaspltlabel_set= (
b'Iris-setosa',
b'Iris-versicolor',
b'Iris-virginica',
)
defread_label(label):
returnlabel_set.index(label)
data=np.loadtxt('iris.data', delimiter=',', converters= { 4 : read_label })
color_set= ('c', 'y', 'm')
color_list= [color_set[int(label)] forlabelindata[:,4]]
plt.scatter(data[:,0], data[:,1], color=color_list)
plt.show()

绘图33.png

Tips:对于三种可能的标签,分别指定一种唯一的颜色。颜色在 color_set 中定义,标签在 label_set 中定义。label_set 中的第 i 个标签与 color_set 中的第i个颜色相关联。然后我们利用它们把标签列表转换成颜色列表 color_list。然后只需调用 plt.scatter() 一次即可显示所有点及其颜色。我们也可以通过对三个不同的类别单独调用 plt.scatter() 来实现,但这将需要更多的代码。另外需要注意的是:如果两点有可能有相同的坐标,但有不同的标签,显示的颜色将是后绘制点的颜色,可以使用透明颜色,用来显示重叠点。

为散点图中数据点的边使用自定义颜色

与color参数控制点的颜色一样,可以使用edgecolor参数控制数据点的边的颜色。可以为每个点的边设置相同的颜色:

importnumpyasnpimportmatplotlib.pyplotaspltdata=np.random.standard_normal((100, 2))
plt.scatter(data[:,0], data[:,1], color='1.0', edgecolor='r')
plt.show()

绘图40.png

Tips:也可以像在为每个点定义不同的颜色部分中介绍的一样为每个点的边设置不边的颜色

使用自定义颜色绘制条形图

控制绘制条形图使用的颜色与曲线图和散点图的工作原理相同,即通过可选参数 color:

importnumpyasnpimportmatplotlib.pyplotaspltw_pop=np.array([5., 30., 45., 22.])
m_pop=np.array( [5., 25., 50., 20.])
x=np.arange(4)
plt.barh(x, w_pop, color='m')
plt.barh(x, -m_pop, color='c')
plt.show()

![使用自定义颜色绘制条形图](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/519a3ef28c974e9e80b02e86f92b2e8c~tplv-k3u1fbpfcp-watermark.image?)

Tips:使用 pyplot.bar() 和 pyplot.barh() 函数自定义颜色绘制条形图的工作方式与 pyplot.scatter() 完全相同,只需设置可选参数 color,同时也可以参数 edgecolor 控制条形边的颜色。

importnumpyasnpimportmatplotlib.pyplotaspltvalues=np.random.random_integers(99, size=50)
color_set= ('c', 'm', 'y', 'b')
color_list= [color_set[(len(color_set) *val) //100] forvalinvalues]
plt.bar(np.arange(len(values)), values, color=color_list)
plt.show()

绘图34.png

使用自定义颜色绘制饼图

自定义饼图颜色的方法类似于条形图:

importnumpyasnpimportmatplotlib.pyplotaspltcolor_set= ('c', 'm', 'y', 'b')
values=np.random.rand(6)
plt.pie(values, colors=color_set)
plt.show()

绘图41.png

Tips:饼图接受使用 colors 参数(注意,此处是 colors,而不是在 plt.plot() 中使用的color )的颜色列表。但是,如果颜色数少于输入值列表中的元素数,那么 plt.pie() 将循环使用颜色列表中的颜色。在示例中,使用包含四种颜色的列表,为包含六个值的饼图着色,因此,其中有两个颜色将使用两次。

使用自定义颜色绘制箱型图

将箱型图中线条颜色进行修改:

importnumpyasnpimportmatplotlib.pyplotaspltvalues=np.random.randn(100)
b=plt.boxplot(values)
forname, line_listinb.items():
forlineinline_list:
line.set_color('m')
plt.show()

绘图36.png

使用色彩映射绘制散点图

如果要在图形中使用多种颜色,逐个定义每种颜色并不是最佳方案,色彩映射可以解决此问题。色彩映射用一个变量对应一个值(颜色)的连续函数定义颜色。matplotlib 提供了几种常见的颜色映射;大多数是连续的颜色渐变。

色彩映射在 matplotib.cm 模块中定义,提供创建和使用色彩映射的函数,它还提供了预定义的色彩映射选择。

函数 pyplot.scatter() 接受 color 参数的值列表,当提供 cmap 参数时,这些值将被解释为色彩映射的索引:

importnumpyasnpimportmatplotlib.cmascmimportmatplotlib.pyplotaspltn=256angle=np.linspace(0, 8*2*np.pi, n)
radius=np.linspace(.5, 1., n)
x=radius*np.cos(angle)
y=radius*np.sin(angle)
plt.scatter(x, y, c=angle, cmap=cm.hsv)
plt.show()

绘图37.png

Tips:在 matplotlib.cm 模块中提供了大量预定义的色彩映射,其中 cm.hsv 包含全光谱的颜色。

使用色彩映射绘制条形图

plt.scatter() 函数内置了对色彩映射的支持,其他一些绘图函数也内置支持色彩映射。但是,有些函数(如 pyplot.bar() )并未内置对色彩映射的支持。但是 matplotlib 可以从颜色映射显式生成颜色:

importnumpyasnpimportmatplotlib.cmascmimportmatplotlib.pyplotaspltimportmatplotlib.colorsascolvalues=np.random.random_integers(99, size=50)
cmap=cm.ScalarMappable(col.Normalize(0, 99), cm.binary)
plt.bar(np.arange(len(values)), values, color=cmap.to_rgba(values))
plt.show()

绘图35.png

Tips:首先创建色彩映射 cmap,以便将 [0, 99] 范围内的值映射到 matplotlib.cm.binary 的颜色。然后,函数 cmap.to_rgba 将值列表转换为颜色列表。因此,尽管 plt.bar 并未内置色彩映射支持,但依旧可以使用并不复杂的代码实现色彩映射。

创建自定义配色方案

matplotlib 使用的默认颜色考虑的主要对象是打印文档或出版物。因此,默认情况下,背景为白色,而标签、轴和其他注释则显示为黑色,在某些不同的使用环境中,我们可能需要使用的配色方案;例如,将图形背景设置为黑色,注释设置为白色。

在 matplotlib 中,各种对象(如轴、图形和标签)都可以单独修改。但逐个更改这些对象的颜色配置并非最佳方案。在 matplotlib 中,所有对象都可以利用集中式配置修改其默认颜色:  

importnumpyasnpimportmatplotlibasmplfrommatplotlibimportpyplotaspltmpl.rc('lines', linewidth=2.)
mpl.rc('axes', facecolor='k', edgecolor='w')
mpl.rc('xtick', color='w')
mpl.rc('ytick', color='w')
mpl.rc('text', color='w')
mpl.rc('figure', facecolor='k', edgecolor='w')
mpl.rc('axes', prop_cycle=mpl.cycler(color=[(0.1, .5, .75),(0.5, .5, .75)]))
x=np.linspace(0, 7, 1024)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

绘图39.png

相关文章
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
210 0
|
6月前
|
搜索推荐 数据可视化 Python
Matplotlib高级技巧:自定义图表样式与布局
【4月更文挑战第17天】本文介绍了Matplotlib的高级技巧,包括自定义图表样式和布局。通过设置`color`、`linestyle`、`marker`参数,可以改变线条、散点的颜色和样式;使用自定义样式表实现整体风格统一。在布局方面,利用`subplots`创建多子图,通过`gridspec`调整复杂布局,`subplots_adjust`优化间距,以及添加图例和标题增强可读性。掌握这些技巧能帮助创建更具吸引力的个性化图表。
|
存储 人工智能 数据可视化
Python Matplotlib库:统计图补充
上两期我们讲了 Matplotlib 库的基本语法和基本绘图展示。这期我们来说说如何用 Matplotlib 库绘制常用统计图。用hist()方法来绘制直方图。用boxplot()方法来绘制箱线图。用errorbar()方法来绘制误差条图。用violinplot()方法来绘制小提琴图。用eventplot()方法来绘制尖峰栅格图。用hist2d()方法来绘制二维直方图/散点密度图。用hexbin()方法来绘制Hexbin散点图。用pie()方法来绘制扇形图。
244 0
Python Matplotlib库:统计图补充
|
数据可视化 Python
可视化库Matplotlib-折线统计图
可视化库Matplotlib-折线统计图
可视化库Matplotlib-折线统计图
Py之matplotlib:matplotlib绘图中与颜色相关的参数(color颜色参数、linestyle线型参数、marker标记参数)可选列表集合(建议收藏)
Py之matplotlib:matplotlib绘图中与颜色相关的参数(color颜色参数、linestyle线型参数、marker标记参数)可选列表集合(建议收藏)
Py之matplotlib:matplotlib绘图中与颜色相关的参数(color颜色参数、linestyle线型参数、marker标记参数)可选列表集合(建议收藏)
|
API Python
Matplotlib绘制3D统计图
在2D统计图统计图中再添加一个维度可以展示更多信息。而且,在进行常规汇报或演讲时,3D图形也可以吸引更多的注意力。在本文中,我们将探讨利用Matplotlib绘制三维统计图。
1902 1
Matplotlib绘制3D统计图
|
Java 定位技术 Python
绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿
绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿
621 0
绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿
|
Python
Matplotlib自定义统计图比例
图形的比例对于统计图而言至关重要,好的图形比例可以让人方便的获取图形中相关数据间的关系,因此设置图形比例对于统计图而言是至关重要的,本文介绍如何使用Maplotlib修改统计图比例。
1463 0
Matplotlib自定义统计图比例
|
Python
Matplotlib添加自定义形状
绘制图形时我们还需要绘制复杂形状,以使统计图看起来更加高级,考虑到这一需求,Matplotlib提供了大量自定义形状的函数,利用可以在统计图中添加各种复杂形状,以使得所绘制的统计图更加具有高级感。
1258 0
Matplotlib添加自定义形状
|
Python
Matplotlib自定义样式绘制精美统计图
matplotlib提供的所有绘图都带有默认样式,但有时需要自定义绘图的颜色和样式,以绘制更加符合审美要求的图像。matplotlib的设计考虑到了此需求,很容易调整matplotlib图形的样式。
823 0
Matplotlib自定义样式绘制精美统计图
下一篇
无影云桌面