2012-07-24 187 views
35

我知道熊猫支持第二个Y轴,但是我好奇是否有人知道如何在绘图上放置第三个Y轴......目前我正在用numpy + pyplot实现这个...但它大数据集很慢。PANDAS绘制多个Y轴

这是绘制在同一张图,便于比较不同单位不同的测量(如相对湿度/温度/和电导率)

如果有谁知道这是否可能在pandas没有太多所以真的只是好奇很多工作。

[编辑]我怀疑是有办法做到这一点(没有太多的开销),但是我希望被证明是错误的,这可能是matplotlib的限制......

回答

55

我想这可能工作:

import matplotlib.pyplot as plt 
import numpy as np 
from pandas import DataFrame 
df = DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) 

fig, ax = plt.subplots() 
ax3 = ax.twinx() 
rspine = ax3.spines['right'] 
rspine.set_position(('axes', 1.15)) 
ax3.set_frame_on(True) 
ax3.patch.set_visible(False) 
fig.subplots_adjust(right=0.7) 

df.A.plot(ax=ax, style='b-') 
# same ax as above since it's automatically added on the right 
df.B.plot(ax=ax, style='r-', secondary_y=True) 
df.C.plot(ax=ax3, style='g-') 

# add legend --> take advantage of pandas providing us access 
# to the line associated with the right part of the axis 
ax3.legend([ax.get_lines()[0], ax.right_ax.get_lines()[0], ax3.get_lines()[0]],\ 
      ['A','B','C'], bbox_to_anchor=(1.5, 0.5)) 

输出:

Output

+0

这是伟大的。但是我们需要ax2吗? – goofd 2014-02-28 00:27:06

+0

使用这种方法我遇到了重叠的图例问题。这对我有帮助:'ax3.legend([ax.get_lines()[0],ax2.get_lines()[0],ax3.get_lines()[0]],[label1','label2','label3'] ,bbox_to_anchor =(1.15,0.5))' – tworec 2017-04-12 11:05:06

+0

嗨!我想知道如何为每个轴添加'ylabel'?谢谢! – 2018-01-27 08:05:42