【问题标题】:get_xticklabels() contains empty text instancesget_xticklabels() 包含空文本实例
【发布时间】:2015-12-18 11:46:16
【问题描述】:

我正在尝试旋转图中的 x 刻度标签。我创建了一个以我想要绘制的样式绘制的通用函数。我执行以下操作:

labels=ax2.get_xticklabels()
for i,label in labels:
   labels[i]=label.get_text()
ax2.set_xticklabels(labels, rotation=30)

这产生了没有 x_tick 标签的图,所以我挖得更深: 我让它在循环时打印标签,它们是空文本实例。然而,这就是它变得奇怪的地方:当我只得到标签(labels=ax2.get_xticklabels()),并让绘图函数返回文本实例列表(返回标签)时,列表中的文本实例确实有正确的字符串,并且上面的代码会按预期生成字符串列表。当我尝试在函数内部编辑文本实例时,我不确定为什么文本实例为空,但当我让函数返回标签未编辑时正确。有什么建议吗?

【问题讨论】:

  • 您能否发布一个最小的工作示例,其中包含您调用函数的代码以及您得到的错误?

标签: python matplotlib


【解决方案1】:

我会根据你问题的标题来回答,因为我不明白后面的解释。

在绘制图形之前不会填充刻度标签。

plt.plot([1, 2])
ax = plt.gca()
labels = ax.get_xticklabels()
for label in labels:
    print(label)

输出:

Text(0,0,'')
Text(0,0,'')
Text(0,0,'')
Text(0,0,'')
Text(0,0,'')
Text(0,0,'')
Text(0,0,'')
Text(0,0,'')

当您调用 plt.draw() 时,刻度标签会被填充:

plt.plot([1, 2])
ax = plt.gca()
plt.draw()
labels = ax.get_xticklabels()
for label in labels:
    print(label)

输出:

Text(0,0,'')
Text(0,0,'0.0')
Text(0.2,0,'0.2')
Text(0.4,0,'0.4')
Text(0.6,0,'0.6')
Text(0.8,0,'0.8')
Text(1,0,'1.0')
Text(0,0,'')

【讨论】:

    【解决方案2】:

    我不确定这是否是您想要的解决方案。我有一个DataFrame,它的 x-ticks 都是不同案例的名称。我不得不做这样的事情。

    ax.set_xticks(np.arange(len(my_df.index)))
    ax.set_xticklabels([case for case in my_df.columns], rotation=30)
    

    【讨论】:

      【解决方案3】:
      for tl in ax2.get_xticklabels():
          tl.set_rotation(30)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多