2012-07-24 275 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