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即可表示为红色。同时一些某些颜色的具有简洁的别名,如下表所示:

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

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

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

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

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

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

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

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

为所有点使用相同的颜色

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

为每个点定义不同的颜色

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

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

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

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

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

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

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

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

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

使用自定义颜色绘制饼图

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

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

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

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


使用色彩映射绘制散点图

如果要在图形中使用多种颜色,逐个定义每种颜色并不是最佳方案,色彩映射可以解决此问题。色彩映射用一个变量对应一个值(颜色)的连续函数定义颜色。matplotlib提供了几种常见的颜色映射;大多数是连续的颜色渐变。色彩映射在matplotib.cm模块中定义,提供创建和使用色彩映射的函数,它还提供了预定义的色彩映射选择。函数pyplot.scatter()接受color参数的值列表,当提供cmap参数时,这些值将被解释为色彩映射的索引:

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

使用色彩映射绘制条形图

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

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

创建自定义配色方案

matplotlib使用的默认颜色考虑的主要对象是打印文档或出版物。因此,默认情况下,背景为白色,而标签、轴和其他注释则显示为黑色,在某些不同的使用环境中,我们可能需要使用的配色方案;例如,将图形背景设置为黑色,注释设置为白色。在matplotlib中,各种对象(如轴、图形和标签)都可以单独修改。但逐个更改这些对象的颜色配置并非最佳方案。在matplotlib中,所有对象都可以利用集中式配置修改其默认颜色:


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容