【Matplotlib数据可视化】同一坐标系下绘制多图

1,531 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

1. 在一个坐标系中绘制多个图像

比如我们想在一个城市温度变化折图中,再绘制另外一个城市的温度变化折线图,那么我们就要学会如何在一个坐标系下绘制多个图像。

注意:想要去添加另一个在同一坐标系当中的不同图形,其实很简单,只需要我们再次plot即可。但是需要区分两种线条。

具体语法如下所示:在坐标系中绘制两个折线图,用到了同一个x,但也用到了两个不同对应的y值。

# 2. 绘制折线图
plt.plot(x, y_shanghai)
plt.plot(x, y_beijing)

2. 设置图形风格

绘图中可以设置图形风格,语法如下:

plt.plot(x, y, color='r', linestyle='==')

  • color:指定线的颜色,通常都是颜色英文的首字母表示
  • linestyle:指定线段类型

具体图形风格如下表格所示:

颜色字符风格字符
r红色- 实线
g绿色-- 虚线
b蓝色-. 点划线
w白色: 点虚线
c青色'' 留空、空格
洋红
y黄色
k黑色

3. 显示图例

如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legent()将图例显示出来。 具体语法如下所示:

plt.plot(x, y_beijing, color='r', linestyle='--', label='北京')

# 显示图例
plt.legend(loc='best')
  • label:图像标签,表示哪个图显示哪个名称
  • loc="best":自动在最好的位置进行显示
  • loc="upper right":上边靠右侧显示
  • loc="right":在右侧进行显示
  • loc="center left":中心靠左侧进行显示

4. 案例演示

案例需求:请在一个坐标系下分别显示两个城市(例如:北京和上海)温度随时间变化折线图,并且开启图例、网格,设计折线段类型、折线段颜色。

import random
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 0. 准备x,y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]   # 列表生成式
y_beijing = [random.uniform(1, 3) for j in x]


# 1. 创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2. 绘制折线图
plt.plot(x, y_shanghai, label='上海')
plt.plot(x, y_beijing, color='r', linestyle='--', label='北京')

# 显示图例
plt.legend(loc='best')

# 2.1 添加x,y轴刻度
# 设置x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴坐标刻度显示
plt.xticks(x[::5], x_ticks_label[::5])  # 坐标刻度不可以直接通过字符串进行修改
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)  # 开启网格,虚线,透明度0.5

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)

# 2.4 图像保存
# 保存图片到指定路径
# 在引号中放到是保存的路径
# plt.savefig("./test.png")

# 3. 显示图像
plt.show()

运行结果如下图所示:

Figure_1.png