在不同刻度的不同轴上绘制两个数据框列

2 投票
2 回答
7067 浏览
提问于 2025-04-18 10:19

我想在一个数据表中画两个列的图,一个列的Y轴要用对数刻度,另一个则用普通刻度。我不太确定该怎么写代码,文档里的说明也不是很清楚。有没有人能告诉我正确的写法是什么,还有怎么学习在Python中使用matplotlib这个库?

2 个回答

0

你可以按照以下的方式来做:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

arr_base = np.arange(2,11)
arr_log = np.log(arr_base)
my_df = pd.DataFrame(np.vstack((arr_base, arr_log)).T, columns=['a', 'b'])

fig = plt.figure()
sub_plot = fig.add_subplot(1, 1, 1)
sub_plot.plot(arr_base)
sub_plot.plot(arr_log)
plt.savefig('myplot.svg')

如果你想学习matplotlib的基础知识,特别是和pandas一起使用的,可以看看Wes McKinney的书,叫做“Python数据分析”。这本书在第8章对matplotlib有很好的介绍(你可以在第228页找到和我例子非常相似的内容),而且如果你打算多用pandas,这本书是个很重要的参考资料,同时也对numpy有很好的介绍。

matplotlib的主页上也有一些教程的链接。他们还维护着一个示例使用页面。这两个都是很不错的学习资源。

9

Pandas 提供了一个选项,可以在一个叫做 辅助 y 轴 上绘图。除此之外,你只需要用 .set_scale('log') 来改变这个辅助轴的刻度。

下面是一个例子:

import matplotlib.pylab as plt
import pandas as pd

df = pd.DataFrame({'x': [1,2,0,4], 'y': [1e1, 5e3, 3e2, 3e4]})

ax = df.plot(secondary_y='y')
ax2 = ax.twinx()
ax2.set_yscale('log')

plt.show()

带有辅助 y 轴的对数刻度图

撰写回答