Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

5.3 matplotlib的绘图样式

参考章节附录:在jupyter中显示无损图形,我们加入以下代码:

from matplotlib_inline import backend_inline
backend_inline.set_matplotlib_formats('svg') 

1. 图形大小

Matplotlib中的原始图形尺寸单位是英寸,源自印刷行业标准。但是,用户可能需要以厘米或像素等其他单位指定图形。

plt.subplots里添加figsize参数,控制图形大小,figsize是一个tuple类型的参数(长和宽)

import matplotlib.pyplot as plt
plt.figure(figsize=(6, 2))
text_kwargs = dict(ha='center', va='center', fontsize=28, color='C1')
plt.text(0.5, 0.5, '6 inches x 2 inches', **text_kwargs)
plt.show()
Loading...
cm = 1/2.54  # centimeters in inches
plt.figure(figsize=(15*cm, 5*cm))
plt.text(0.5, 0.5, '15cm x 5cm', **text_kwargs)
plt.show()
Loading...

关于尺寸,可以阅读: Figure size in different units

练习

  1. 使用pandas库读取世界幸福报告数据集,路径为:‘datasets/world-happiness-report-china.csv’,读取完赋值给变量df

  2. 横坐标变量X为’年份’, 纵坐标变量Y为’幸福指数’

  3. 绘制幸福指数随年份变化的折线图

  4. 将图片尺寸大小调成:6英寸*3英寸








2. 调整线条样式

你可以修改图形中的任何内容,包括颜色、标记、线条宽度。

import numpy as np
plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y, color='orange')
plt.show()
Loading...
plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y, color='orange', linestyle='--')
plt.show()
Loading...
plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y, color='orange', linestyle='--', linewidth=5)
plt.show()
Loading...
plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y, color='orange',  marker="^")
plt.show()
Loading...

练习

修改上一练习的代码,将数据点的标记为’^‘,颜色为’orange’








3. 添加标题和坐标轴的标签

标签(Labels):用于标识图表中的元素,如坐标轴标签、数据点标签、图例标签等。标签可以提供额外的信息,使图表更易读和理解。

plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y)
plt.title('A Sin Wave')
plt.ylabel('Y')
plt.xlabel('X')
plt.show()
Loading...

练习

改进上一练习的代码:

  1. 设置标题为’中国幸福报告指数(2006-2020)’

  2. 设置横坐标为’年份’

  3. 设置纵坐标为’指数’








4. 修改坐标轴刻度

要修改坐标轴刻度,你可以使用 Matplotlib 的 xticks()yticks() 函数来设置自定义的刻度值。

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y)
plt.xticks(np.arange(-2, 16, 1))  # 设置 x 轴刻度为 -2 到 15,间隔为 1
plt.yticks(np.arange(-2, 3, 0.5))  # 设置 y 轴刻度为 -2 到 2.5,间隔为 0.5
plt.show()
Loading...

5. 添加网格线

网格线(Grid Lines)用于在绘图区域中创建水平和垂直的参考线,帮助读者对齐和比较数据。

在Matplotlib中,你可以使用grid()函数来添加网格线,默认情况下,网格线是关闭的。

plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y)
plt.text(7, 0, 'Y = sin(X)') 
plt.ylabel('Y')
plt.xlabel('X')
plt.grid()           # 设置网格线, 其他参数:linestyle='--', alpha=0.6
plt.show()
Loading...

练习

改进上一练习的代码,增加网格线








6. 添加图例

图例(Legend)用于解释图表中不同数据系列的符号或颜色的说明。图例通常位于图表的一角,帮助读者理解图表中的数据含义。

首先,在绘图语句中添加label='图型名称',然后使用ax.legend(loc='best')语句。loc参数可选:‘best’,‘upper right’ ,‘upper left’ ,‘lower left’,‘lower right’ ,‘right’ ,‘center left’ ,‘center right’,‘lower center’,‘upper center’,‘center’。

plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y1, Y2 = np.sin(X), np.cos(X)
plt.plot(X, Y1, label='Y1')   # 这里需要添加图形名称 label='Y1'
plt.plot(X, Y2, label='Y2')
plt.ylabel('Y')
plt.xlabel('X')
plt.legend(loc='best')     # 显示图例
plt.show()
Loading...

练习

改进上一练习的代码:增加图例,位置为左上角








7. 保存图片到文件

你可以使用plt.savefig将绘制的图片从内存保存到文件。例如将图片保存为jpg格式,你只需要输入以下代码:

plt.savefig('figpath/fig_name.jpg')

有几个重要的选项,如dpi,它控制每英寸点数的分辨率。

plt.savefig('figpath/fig_name.jpg', dpi=400)

保存的格式支持’png’, ‘jpg’, ‘pdf’, ‘svg’, ‘ps’, ‘eps’, ...

通过运行下面命令可以了解当前当前的dpi值

print("当前的dpi值:%i" %(plt.rcParams['figure.dpi']))       # 获取当前的dpi值
当前的dpi值:100

对于6 inches x 2 inches的图形,来说其基于点数dpi的分辨率为:

print("基于点数的分辨率:%i*%i" %(plt.rcParams['figure.dpi']*6, plt.rcParams['figure.dpi']*2))      
基于点数的分辨率:600*200

练习

改进上一练习的代码,保存图片为’中国幸福报告指数(2006-2020).png’,dpi设置为200








8. 添加文本

有时候,我们需要在图形上添加文本标注。在pyplot模块里,使用pyplot.text()函数能够在任意位置添加文本,其语法如下:

matplotlib.pyplot.text(x, y, s)
x:横轴数据
y:纵轴数据
s:需要标注的文本
plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y = np.sin(X)
plt.plot(X, Y)
plt.text(7, 0, 'Y = sin(X)')  #添加文本,位置为(7,0),文本内容为'Y = sin(X)'
plt.ylabel('Y')
plt.xlabel('X')
plt.show()
Loading...

9. 组织多个变量

你可以在同一个图形里绘制多个数据,当然,你也可以将一个图形分割成多个子图。

plt.figure(figsize=(6,2))
X = np.linspace(0, 15, 100)
Y1, Y2 = np.sin(X), np.cos(X)
plt.plot(X, Y1)
plt.plot(X, Y2)
plt.show()
Loading...