旋转Matplotlib刻度标签会导致奇怪的间距问题

时间:2016-03-27 22:56:35

标签: python matplotlib

我有以下情节:

enter image description here

我想通过将刻度旋转~40度来使x轴刻度更具可读性。所以来自:

plt.xticks(list(range(0, width)), list(df_100.columns), rotation='90', fontsize=16)

要:

plt.xticks(list(range(0, width)), list(df_100.columns), rotation='40', fontsize=16)

但是,当我这样做时,我会遇到一些疯狂的间距问题:

enter image description here

(忽略颜色的变化......)

造成这个问题的原因是什么?我该如何解决?这是一个最低限度的工作示例:

import matplotlib.pyplot as plt
import numpy as np

# Z is your data set
N = 100
height = df_100.shape[0]
width = df_100.shape[1]
# Z = np.random.random((100, 29))

# G is a NxNx3 matrix
G = np.zeros((height,width,3))

# Where we set the RGB for each pixel
G[Z>0.5] = [1, 1, 1]
G[Z<0.5] = [0.25, 0.25, 0.25]

fig, ax = plt.subplots(figsize=(20, 10))
ax.imshow(G, interpolation='none')

ax.set_aspect('auto')
ax.grid(None)
ax.xaxis.tick_top()
plt.xticks(list(range(0, width)), list(df_100.columns), rotation='45', fontsize=16)
plt.yticks([0, df_100.shape[0] - 1], [1, df_100.shape[0]], fontsize=20)
plt.tight_layout()
plt.show()

1 个答案:

答案 0 :(得分:2)

如果xticklabels长度相同,则不会遇到此类问题。但鉴于标签长度不同,您可能会遇到这种问题。因为默认旋转来自xlabel字符串的中心。因此,您可以尝试正确设置旋转锚点 [&#39;对&#39;,&#39; center&#39;,&#39; left&#39;]。

ha = 'left' # or 'right'. Experiment with it.
ax.set_xticks(x) # set tick location
ax.set_xticklabels(xlabels, rotation=40, ha=ha) # rotate the labels with proper anchoring.