python 当使用'secondary_y'时,如何改变pd.DataFrame.plot()的图例字体大小?

cbeh67ev  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(158)

问题

  • 我在pd.DataFrame.plot()中使用了secondary_y参数。
  • 在尝试将图例的字体大小更改为.legend(fontsize=20)时,我最终在图例中只有1个列名,而实际上我有2列要打印在图例上。
  • 当我没有使用secondary_y参数时,这个问题(图例中只有1个列名)不会发生。
      • 我希望 Dataframe 中的所有列名都打印在图例中,并更改图例的字体大小,即使在绘制 Dataframe 时使用secondary_y。**

示例

  • 下面的secondary_y示例只显示了一个列名A,而实际上我有两个列,即AB
  • 图例的字体大小会更改,但仅适用于1个列名。
import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame(np.random.randn(24*3, 2),
                  index=pd.date_range('1/1/2019', periods=24*3, freq='h'))
df.columns = ['A', 'B']
df.plot(secondary_y = ["B"], figsize=(12,5)).legend(fontsize=20, loc="upper right")

  • 当我不使用secondary_y时,图例显示AB这两列。
import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame(np.random.randn(24*3, 2),
                  index=pd.date_range('1/1/2019', periods=24*3, freq='h'))
df.columns = ['A', 'B']
df.plot(figsize=(12,5)).legend(fontsize=20, loc="upper right")

y4ekin9u

y4ekin9u1#

要管理自定义它,您必须使用Matplotlib的子图功能创建图形:

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

np.random.seed(42)
df = pd.DataFrame(np.random.randn(24*3, 2),
                  index=pd.date_range('1/1/2019', periods=24*3, freq='h'))
df.columns = ['A', 'B']

#define colors to use
col1 = 'steelblue'
col2 = 'red'

#define subplots
fig,ax = plt.subplots()

#add first line to plot
lns1=ax.plot(df.index,df['A'],  color=col1)

#add x-axis label
ax.set_xlabel('dates', fontsize=14)

#add y-axis label
ax.set_ylabel('A', color=col1, fontsize=16)

#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx()

#add second line to plot
lns2=ax2.plot(df.index,df['B'], color=col2)

#add second y-axis label
ax2.set_ylabel('B', color=col2, fontsize=16)

#legend
ax.legend(lns1+lns2,['A','B'],loc="upper right",fontsize=20)

#another solution is to create legend for fig,:
#fig.legend(['A','B'],loc="upper right")

plt.show()

结果:

lawou6xi

lawou6xi2#

这是一个有点晚的响应,但对我有效的是简单地在plot函数之后设置plt.legend(fontsize = wanted_fontsize)

相关问题