下面是详细的讲解“matplotlib 双y轴绘制及合并图例的实现代码”的完整攻略:
1. 背景介绍
在数据可视化领域,经常有需要同时展示两个不同单位、数值范围及趋势的数据。这时,我们就需要使用matplotlib库来画双y轴图,让两个y轴分别对应不同刻度,展示数据的变化趋势。
同时,当我们需要在同一个图中绘制多条曲线时,为了便于观察数据趋势,我们需要将多个图例合并在一起,方便对比和分析。
这时,matplotlib库中的twinx()函数和legend()函数就可以满足我们的需求。
2. 双y轴绘制实现
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [20, 16, 12, 8, 4]
# 创建画布和坐标轴对象
fig, ax1 = plt.subplots()
# 创建第二个坐标轴对象
ax2 = ax1.twinx()
# 绘制y1对应的线条
ax1.plot(x, y1, color='r', marker='o', label='y1')
# 绘制y2对应的线条
ax2.plot(x, y2, color='g', marker='o', label='y2')
# 设置标题和坐标轴标签内容
ax1.set_title("Double y-axis plot example")
ax1.set_xlabel("X-axis")
ax1.set_ylabel("Y1-axis")
ax2.set_ylabel("Y2-axis")
# 显示图例
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# 显示图像
plt.show()
代码解释:
- 准备数据:定义两个序列x和对应的y1、y2数据
- 创建画布和坐标轴对象:使用subplot()函数创建一个画布和一个主坐标轴对象ax1
- 创建第二个坐标轴对象:使用twinx()函数创建一个副坐标轴对象ax2
- 分别绘制y1和y2对应的线条:使用plot()函数,指定x、y、颜色和线型等参数绘制线条
- 设置标题和坐标轴标签内容:使用set_title()、set_xlabel()、set_ylabel()函数设置标题、x和y轴标签
- 显示图例:使用legend()函数显示图例,分别给主坐标轴和副坐标轴对象指定位置
- 显示图像:使用show()函数显示图像。
3. 合并图例实现
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [20, 16, 12, 8, 4]
# 创建画布和坐标轴对象
fig, ax = plt.subplots()
# 绘制y1对应的线条
ax.plot(x, y1, color='r', marker='o', label='y1')
# 绘制y2对应的线条
ax.plot(x, y2, color='g', marker='o', label='y2')
# 绘制第三条线,用于合并图例
ax.plot([], [], linestyle='none', label='')
# 设置图例位置和标题内容
ax.legend(loc='upper left', title='Legend Title')
# 显示图像
plt.show()
代码解释:
- 准备数据:定义两个序列x和对应的y1、y2数据
- 创建画布和坐标轴对象:使用subplot()函数创建一个画布和一个主坐标轴对象ax
- 绘制y1和y2对应的线条:使用plot()函数,指定x、y、颜色和线型等参数绘制线条,每个线条设置一个label属性,用于图例标签
- 绘制第三条线,用于合并图例:使用plot()函数,不指定x、y参数,设定linestyle为'none',label属性为空字符串,产生一个透明的线条,将y1和y2的图例合并在一起
- 设置图例位置和标题内容:使用legend()函数显示图例,通过loc和title属性设置图例位置和标题内容
- 显示图像:使用show()函数显示图像。
4. 示例说明
下面两个示例旨在说明双y轴绘制和合并图例的不同场景应用。
示例1:温湿度双y轴绘制
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
temp = [23, 25, 27, 28, 26]
humidity = [60, 50, 40, 35, 45]
# 创建画布和主坐标轴对象
fig, ax1 = plt.subplots()
# 创建副坐标轴对象,并共享主坐标轴对象
ax2 = ax1.twinx()
# 绘制温度对应的线条,使用红色实心圆点表示
ax1.plot(x, temp, color='r', marker='o', label='Temperature')
# 绘制湿度对应的线条,使用绿色实心三角形表示
ax2.plot(x, humidity, color='g', marker='^', label='Humidity')
# 设置标题和坐标轴标签内容
ax1.set_title("Temperature and Humidity")
ax1.set_xlabel("Time")
ax1.set_ylabel("Temperature (C)")
ax2.set_ylabel("Humidity (%)")
# 显示图例
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# 显示图像
plt.show()
示例1展示了温湿度在同一张图上、分别对应不同y轴进行绘制,使用不同颜色、不同形状的标记点标识。
示例2:三线条合并图例
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [20, 16, 12, 8, 4]
y3 = [5, 10, 15, 20, 25]
# 创建画布和坐标轴对象
fig, ax = plt.subplots()
# 绘制y1、y2、y3对应的线条
ax.plot(x, y1, color='r', marker='o', label='Line 1')
ax.plot(x, y2, color='g', marker='s', label='Line 2')
ax.plot(x, y3, color='b', marker='*', label='Line 3')
# 绘制第四条线,用于合并图例
ax.plot([], [], linestyle='none', label='')
# 设置图例位置和标题内容
ax.legend(loc='upper left', title='Legend Title')
# 显示图像
plt.show()
示例2展示了三个线条在同一张图上展示,通过绘制一个空的line,将三个图例合并在了一起,并设置了图例标题。
5. 总结
本文详细讲解了matplotlib库中双y轴绘制及合并图例的实现代码,并给出了两个示例分别展示了双y轴绘制和合并图例的不同应用场景。通过实践和不断尝试,可以更加深入的掌握这两个函数的使用方法,绘制出更加美观、易于理解的数据可视化图表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:matplotlib 双y轴绘制及合并图例的实现代码 - Python技术站