检测 matplotlib 刻度标签何时重叠

Posted

技术标签:

【中文标题】检测 matplotlib 刻度标签何时重叠【英文标题】:Detect when matplotlib tick labels overlap 【发布时间】:2017-09-20 12:14:28 【问题描述】:

我有一个由 pandas 生成的 matplotlib 条形图,如下所示:

index = ["Label 1", "Label 2", "Lorem ipsum dolor sit amet", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ac vehicula leo, vitae sodales orci."]
df = pd.DataFrame([1, 2, 3, 4], columns=["Value"], index=index)
df.plot(kind="bar", rot=0)

如您所见,旋转为 0 时,xtick 标签重叠。 如何检测两个标签何时重叠,并将这两个标签旋转 90 度?

【问题讨论】:

【参考方案1】:

没有简单的方法来确定标签是否重叠。

一个可能的解决方案可能是根据字符串中的字符数来决定旋转标签。如果字符很多,标签重叠的可能性很高。

import matplotlib.pyplot as plt
import pandas as pd

index = ["Label 1", "Label 2", "Lorem ipsum dolor sit amet", "Duis ac vehicula leo, vitae sodales orci."]
df = pd.DataFrame([1, 2, 3, 4], columns=["Value"], index=index)
ax = df.plot(kind="bar", rot=0)

threshold = 30
for t in ax.get_xticklabels():
    if len(t.get_text()) > threshold:
        t.set_rotation(90)

plt.tight_layout()
plt.show()

我个人会选择一种可以旋转所有标签的解决方案,但只能旋转 15 度左右,

import matplotlib.pyplot as plt
import pandas as pd

index = ["Label 1", "Label 2", "Lorem ipsum dolor sit amet", "Duis ac vehicula leo, vitae sodales orci."]
df = pd.DataFrame([1, 2, 3, 4], columns=["Value"], index=index)
ax = df.plot(kind="bar", rot=15)
plt.setp(ax.get_xticklabels(), ha="right")

plt.tight_layout()
plt.show()

【讨论】:

以上是关于检测 matplotlib 刻度标签何时重叠的主要内容,如果未能解决你的问题,请参考以下文章

Python,x轴标题与matplotlib中的刻度标签重叠

Matplotlib 条形图:对角刻度标签

如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效

如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效

Matplotlib 显示重叠的 x-tick 标签

整数刻度标签 matplotlib,没有原点刻度标签