Pandas 绘制多个Y轴
在本文中,我们将介绍如何在Pandas中绘制有多个Y轴的图表。
有时,我们需要在同一图表中绘制多个Y轴来比较不同数据的趋势。Pandas通过Matplotlib提供了绘制多个Y轴的功能。下面我们将分步介绍。
阅读更多:Pandas 教程
数据
我们首先需要有数据,我们这里使用鸢尾花数据集来演示。首先,我们需要导入需要的库和数据:
import pandas as pd
import matplotlib.pyplot as plt
iris = pd.read_csv('iris.csv')
可以通过iris.head()查看前几行:
| sepal_length | sepal_width | petal_length | petal_width | species | |
|---|---|---|---|---|---|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa | 
| 1 | 4.9 | 3 | 1.4 | 0.2 | setosa | 
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa | 
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa | 
| 4 | 5 | 3.6 | 1.4 | 0.2 | setosa | 
步骤
我们将在以下数据基础上创建一个简单的图表。我们将使用左边的Y轴显示sepal_width(萼片宽度)和右边的Y轴显示sepal_length(萼片长度)。下面是步骤:
- 在matplotlib中创建图表
- 向图表添加一个坐标轴
- 使用Pandas绘制第一条线到当前轴上并返回画图对象
- 创建第二个坐标轴
- 设置第二个坐标轴的标签
- 使用Pandas绘制第二条线到第二个坐标轴上并返回画图对象
- 添加表示坐标轴选择的线和图例
- 显示图表
# 创建图表
fig, ax1 = plt.subplots()
# 添加左侧轴,在此轴上绘图
ax1.set_xlabel('Index')
ax1.set_ylabel('Sepal Width')
ax1.set_ylim([2.5,4.5])
ax1.plot(iris['sepal_width'], 'b-', label='Sepal Width')
# 创建右侧轴
ax2 = ax1.twinx()
ax2.set_ylabel('Sepal Length')
ax2.set_ylim([4,8])
ax2.plot(iris['sepal_length'], 'r-', label='Sepal Length')
# 添加legend
lines = ax1.get_lines() + ax2.get_lines()
ax1.legend(lines, [l.get_label() for l in lines], loc='upper right')
# 设置图表标题
plt.title('Iris Dataset')
# 显示图表
plt.show()
关于步骤
让我们一步一步看看如何实现多个Y轴的绘制:
步骤1:创建图表
fig, ax1 = plt.subplots()
我们使用plt.subplots()创建一个包括图表和至少一个坐标轴的对象。
步骤2:向图表添加一个坐标轴
ax1.set_xlabel('Index')
ax1.set_ylabel('Sepal Width')
ax1.set_ylim([2.5,4.5])
使用set_xlabel()和set_ylabel()方法给坐标轴设置标签。set_ylim()设置sepal_width的y轴范围。
步骤3:使用Pandas绘制第一条线到当前轴上并返回画图对象
ax1.plot(iris['sepal_width'], 'b-', label='Sepal Width')
使用Pandas中的plot()方法将sepal_width绘制到第一个坐标轴上,b-表示蓝色实线,并设置标签为Sepal Width。
步骤4:创建第二个坐标轴
ax2 = ax1.twinx()
使用ax1.twinx()方法创建一个新的坐标轴,它具有和第一个坐标轴相同的x轴范围和位置,但是y轴面向右侧并具有单独的刻度。
步骤5:设置第二个坐标轴的标签
ax2.set_ylabel('Sepal Length')
ax2.set_ylim([4,8])
使用set_ylabel()和set_ylim()方法分别设置标签和sepal_length的y轴坐标范围。
步骤6:使用Pandas绘制第二条线到第二个坐标轴上并返回画图对象
ax2.plot(iris['sepal_length'], 'r-', label='Sepal Length')
使用Pandas中的plot()方法将sepal_length绘制到第二个坐标轴上,r-表示红色实线,并设置标签为Sepal Length。
步骤7:添加表示坐标轴选择的线和图例
lines = ax1.get_lines() + ax2.get_lines()
ax1.legend(lines, [l.get_label() for l in lines], loc='upper right')
使用get_line()方法获取每个坐标轴的线和标签,然后使用legend()方法将它们添加到图表中。loc='upper right'用于设置图例在右上角。
步骤8:显示图表
plt.show()
运行代码,我们将得到一个图表,它拥有两个Y轴和两条曲线。
总结
Pandas和Matplotlib的组合使得绘制多个Y轴变得容易。我们可以通过创建新坐标轴和在不同坐标轴上绘制数据轻松绘制多个Y轴,并通过图例将它们组合在一起。
 极客教程
极客教程