[英]Plot() in Pandas with two y-axes: Where is the second line stored?
我在 pandas 中使用集成的 plot() 函數來生成具有兩個 y 軸的圖形。 這很有效,圖例甚至指向第二個數據集的(右)y 軸。 但是恕我直言,傳奇的位置很糟糕。
但是,當我更新圖例位置時,我在不方便的位置得到了兩個圖例,一個是正確的('A'、'B(右)'),另一個是在所選位置的錯誤圖例(僅“A”)。
所以現在我想自己生成一個圖例並且正在尋找第二個<matplotlib.lines.Line2D>
,但它不包含在 ax 環境中。
import pandas as pd
df = pd.DataFrame({"A":[1,2,3],"B":[1/4,1/5,1/6]})
ax = df.plot(secondary_y=['B'])
len(ax.lines)
>>> 1
我的最終目標是能夠移動正確的圖例,但我相信我可以手動放置圖例,前提是我可以訪問第二行容器。
如果我有,我將通過調用df.plot(...,legend=None)
並執行類似plt.legend([ax.lines[0],ax.lines[1]],['A','B (right)'],loc='center left',bbox_to_anchor=(1.2, 0.5))
。 但是ax
只存儲第一行“A”,第二行在哪里?
此外ax.get_legend_handles_labels()
僅包含([<matplotlib.lines.Line2D at 0x2630e2193c8>], ['A'])
。
您創建兩個軸。 每個包含一行。 因此,您需要遍歷軸並從每個軸中取出線。
import numpy as np
import pandas as pd
df = pd.DataFrame({"A":[1,2,3],"B":[1/4,1/5,1/6]})
ax = df.plot(secondary_y=['B'])
lines = np.array([axes.lines for axes in ax.figure.axes]).flatten()
print(lines)
為了創建單個圖例,您可以只使用圖形圖例,
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"A":[1,2,3],"B":[1/4,1/5,1/6]})
ax = df.plot(secondary_y=['B'], legend=False)
ax.figure.legend()
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.