轻松可视化:Matplotlib绘图终极指南

姓名:闫伟  学号:15020150038

转载自:https://zhuanlan.zhihu.com/p/46890207

【嵌牛导读】:Matplotlib 是最常用的 2D 绘图库之一,也是一款很实用的数据可视化工具

【嵌牛鼻子】:Matplotlib

【嵌牛提问】:怎么更改图例上的标签名称?如何设置刻度线?怎样将比例设置为对数?我该怎么给图表添加注释和箭头?如何给我的图表添加网格线?

【嵌牛正文】:

本文收集了如何自定义你的 matplotlib 绘图的常见问题和答案,也可以作为 matplotlib 快速绘图的速查表,但不是 matplotlib 的入门介绍。如果你对这个库还不熟悉,可以看看它的文档

文章涵盖的话题包括图表、图表属性、图例、轴、注释和保存图表。

初步小贴士

首先,导入 matplotlib

import matplotlib.pyplot as plt

在 Jupyter Notebook 中,你可以把下面这行代码包含在内,这样每次想画图的时候就不用必须调用 plt.show()了。

%matplotlib inline

另一个方便的技巧是,如果你不想出现 <matplotlib.collections.PathCollection at 0x1182bc710> 这行恼人的信息,只需在你的代码后面添加一个分号,如下面第二张图所示。

之前:

之后:

图表和子图(Subplot)

问:我该怎么增加图表的大小?

很多时候,图表的默认尺寸都很小。你可以添加参数 figsize,像下面这样以英寸为单位指明图形的高度和宽度。

plt.figure(figsize=(20,10))

问:什么是子图(subplot)?我该怎么创建和操作子图?

子图就是一组更小的轴,它们一起存在于单个图中。下面是 2X2 形式的 4 个子图示例:

这些子图是用下面这些代码创建的。我们调用 plt.subplot,并指明 3 个数字。它们指行、列和子图的数量。

for i in range (1, 5):  plt.subplot(2, 2, i)  plt.text(0.5,0.5, str((2, 2, i)), ha=’center’, fontsize = 10)  plt.tight_layout()

在上面的子图中,图中的文本是对这 3 个数字的引用。子图编号的顺序是左上方开始的行,从数字 1 开始。例如,左上图是子图编号 1,右上图是子图编号 2,左下图是子图编号 3,右下图是子图编号 4.

注意,你必须调用 plt.subplot(2, 2, 1) 来激活子图。

问:我的子图布局看着很丑,该怎么调整?

下面例子中,子图之间靠的太近了,看着有点挤。我们可以通过调用 plt.tight_layout() 来修正。它会清理子图之间的填充部分,让图表看起来更清爽。

之前:

之后:

问:怎么向我的图表添加网格线?

plt.grid(True)

风格和属性

问:如何修改图表中线条的颜色/宽度/风格?

你可以传递和设置参数 color,linewidth 和 linestyle。

plt.plot(x, y, color = ‘green’ , linewidth = 2, linestyle = “-”)

下面是一些你可以选择的线条风格:

问:怎样修改标记的样式或颜色?

你可以传递和设置参数 marker 和 color,如下所示:

plt.scatter(x, y, marker = ‘o’, color = ‘red’)

这里是一些供你选择的标记:

问:怎么修改线条的透明度?

向图表传入 alpha 参数表示线条的透明度,它的设置范围在 0 到 1 之间,其中 0 表示完全透明,1 表示无透明。

plt.plot(x, y, alpha = 0.1)

下图展示了当 alpha 分别为 0.9,0.5 和 0.1 时的透明效果:

图例

问:该怎样为我的图表添加图例?

如果你的图表上没有自动出现图例,你可以用如下代码来显示图例。

plt.legend()

问:该如何修改图例出现的位置?

你可以向 loc 参数中传入以下参数:upper right,upper left,lower left,lower right, right, center left, center right, lower center, upper center, center,分别表示右上角,左上角,左下角,右下角,右角,左中角,右中角,下中心,上中心,中心位置。

plt.legend(loc = ‘lower right’);

问:该怎样修改图例中的标签名称?

方法1:

比方说你有 10 个图例项,你只想修改第一个图例项中的标签。将图例保存到变量 L 之后,可以用“L.get_texts()[0]”调用图例中的第一项,手动设置为你想用的文本。在下面的例子中,我们将图例修改为了‘line123’。

L = plt.legend()get_texts()[0].set_text('line123')

方法2:

另外,你可以创建一列标签名称,设置图例标签等于你创建的列表。

mylabels = ['happy', 'sad', 'nervous', 'angry', 'neutral']plt.legend(labels = my_labels)

问:如何修改图例大小?

如果想设置具体图表中的图例大小,你可以传入 fontsize 参数。

plt.legend(fontsize = 10);

也可以不用数字表示字体大小,像下面这样操作:

plt.legend(fontsize = 'x-large');

问:如何命名 x 轴和 y 轴的标签?以及如何修改字体大小?

根据你想具体使用的哪个轴,你可以叫他们‘ylabel’或‘xlabel’,如下所示。第一项就是你想让轴使用的名称。如果想设置字体大小,像下面这样嵌入 fontsize 参数:

plt.ylabel('Income', fontsize = 15) #for y labelplt.xlabel('Age', fontsize = 15) #for x label

问:我该如何设置刻度线?

第一个参数设置刻度线所在的位置,第二个参数设置刻度线旁边的标签。

plt.yticks([0,2,4,6,7,10], [“0”, “2B”, "4B”, “8B”, “10B”])plt.xticks([0,1,2,3,4,5], [“0”, “1oz”, "2oz”, “3oz”, “4oz”])

问:如何设置轴的长度?

plt.ylim(-1.0,1.0) #for y axisplt.xlim(0, 50) #for x axis

问:如何将比例修改为对数?

plt.yscale(“log”) #for y axisplt.xsclae("log") #for x axis

注释

问:如何向图表添加注释和箭头?

我们可以创建注释,并指明注释 xy 参数的坐标。xytext 定义了标签的坐标。如果我们想添加箭头,需要使用 arrowprops 来显示箭头。

plt.annotate(‘sentosa’, xy = (5.0, 3.5), xytext(4.25, 4.0), arrowprops={'color': 'red'})

保存图表

按自己的需要自定义完图表后,就该保存了。这里我们将示例中的图表命名为“plot1”,用如下方式将图表保存到你的工作目录中。

plt.savefig('plot1.jpg')

最后一点

如果你在 Jupyter Notebook 中画了一个非常大的图表的话,你的 Jupyter Notebook 会变得非常慢。

如果你将鼠标悬停在图形的左侧,会出现一个如下所示的灰色框。双击该灰色框,就能隐藏你的图表,从而让 Jupyter Notebook 可以正常运行。这也有助于滚动图表。

希望本文对你使用 matplotlib 绘图有所帮助。

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

推荐阅读更多精彩内容

  • 一、概述 深度学习的一个重要手段是训练数据和训练过程的可视化,因此,我们关于深度学习的系列介绍文章就从Matplo...
    aoqingy阅读 6,149评论 0 24
  • 资料来源:https://github.com/BrambleXu/pydata-notebook 信息可视化(也...
    林清猫耳阅读 1,555评论 0 3
  • 从事教育工作时间长了,周围接触的都是各种各样的教育工作者。有的是做培训:课程辅导、礼仪培训、潜能开发、性格培养、情...
    嘤说亲子阅读 447评论 0 0
  • 我想小时候谁都看过关于铁杵磨成针的故事。 李白因为学习好苦,不想学习,就跑出去玩,碰到了传说中的老奶奶,在磨一根铁...
    疯叶枫了阅读 748评论 0 0
  • 可能这个世界本来都是灰色的,弱肉强食,海底和从来都是同样的颜色。我就这样默默的走来,默默的离开。 今日天色已晚,早...
    8e47b83a0873阅读 165评论 0 0