簡體   English   中英

Pandas 中有兩個 y 軸的 Plot():第二行存儲在哪里?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM