【问题标题】:matplotlib y axis labels disappearing with fontsize changematplotlib y轴标签随着字体大小的变化而消失
【发布时间】:2018-11-14 23:19:07
【问题描述】:

我有以下代码来绘制数据框的内容。

使用 pandas 和 matplotlib:

thedata = {'2013':[0.0,0.0]
          ,'2014':[0.0,0.0]
          ,'2015':[0.0,0.0]
          ,'2016':[1,0.0]
          ,'2017':[0.0,0.0]
          ,'2018':[1,0.0]}

my_df = pd.DataFrame(thedata, index=['Green cars','Red cars'])

    plt.figure(figsize=(7,3))
    my_ax = plt.gca()
    my_ax.clear()
    my_ax.yaxis.set_major_locator(MaxNLocator(integer=True))

    my_df.transpose().plot(kind='bar'
                , stacked=True  
                , ax=my_ax
                ).grid(True,'major','y')

    my_ax.legend(loc=9, bbox_to_anchor=(0.5, -0.1), frameon=False, ncol=2, fontsize=12 )
    plt.title('All the cars', fontsize = 12 )
    my_ax.set_xticklabels(my_ax.get_xticklabels(),rotation='horizontal', fontsize=12)
#     my_ax.set_yticklabels(my_ax.get_yticklabels(),fontsize=12)

最后一行被注释掉以显示输出。我想将 y 轴标签的字体大小增加到与 x 相同,但是当我取消注释该行并运行它时,y 轴标签就消失了,那里什么也没有显示。

为什么会发生这种情况,我该如何解决?

编辑:- 创建数据框;熊猫 0.23.0,matplotlib 2.2.2

【问题讨论】:

  • 您能否通过在代码中定义数据框并说明您使用的是哪个版本的 matplotlib 和 pandas 来使这个可重现?见minimal reproducible example
  • 编辑帖子以包含此内容

标签: python pandas matplotlib


【解决方案1】:

您在这里面临的问题是在绘制图形之前实际上并未定义刻度标签。

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

fig, ax = plt.subplots()
ax.plot([1,3,4,2])
ax.xaxis.set_major_locator(MaxNLocator(integer=True))
ax.set_xticklabels(ax.get_xticklabels(),fontsize=12)
plt.show()

您可以在访问这些标签之前绘制图形

fig, ax = plt.subplots()
ax.plot([1,3,4,2])
ax.xaxis.set_major_locator(MaxNLocator(integer=True))

fig.canvas.draw()
ax.set_xticklabels(ax.get_xticklabels(),fontsize=12)
plt.show()

然而,为了改变刻度标签的字体大小,人们宁愿使用

ax.tick_params(axis="x", labelsize=12)

或将属性设置为标签,而不实际设置标签的内容。例如。通过setp

plt.setp(ax.get_xticklabels(), fontsize=12)

【讨论】:

  • 谢谢,这行得通。请您解释一下为什么宁愿使用 tick_params() 或 setp()?
  • 如果您设置字体大小,两者都同样适合。不同之处在于您不能通过tick_params 设置every 属性。因此,例如,如果要更改标签的rotation_mode,则不能使用tick_params。如果您想更改字体大小和旋转模式,最好使用带有setp 的单行。另一个论点:当您还没有导入 pyplot 时,您不会完全为了使用 setp 而这样做。因此,在这种情况下,您可以使用 tick_params 或使用循环的更长变体。
  • 我尝试了所有这些方法仍然无法设置我的刻度字体大小。请有人帮助我。 ibb.co/HTKC9nM
猜你喜欢
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2016-11-11
  • 2019-11-29
  • 2019-01-14
  • 1970-01-01
相关资源
最近更新 更多