首页 > 解决方案 > 如何在 matplotlib 的箱线图中删除自定义标签下的数字 x 刻度?

问题描述

我想将多个箱线图(在 python3 中使用 matplotlib)绘制成一个图形,并沿 x 轴相应地标记它们。我尝试了多种方法来设置自定义 x-ticks,但旧的数字刻度总是显示出来。

以下两个代码片段产生相同的结果。在第一个中,我plt.xticks(ticks, labels, rotation='vertical')用来设置刻度(也不适用于旋转)。在这两种情况下compressed_runs都是一个字典,其中键与 x-ticks 的标签一致,值是数字数组。

plt.figure(figsize=[10, 8], dpi=300)
labels = ['test']*len(compressed_runs)
ticks = [i+1 for i, v in enumerate(compressed_runs)]

plt.xticks(ticks, labels, rotation='vertical')
plt.ylabel('communication times [µs]')
plt.title('Test title')

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.savefig(plotname)
plt.close()

我还尝试直接修改图形的轴:

fig = plt.figure(figsize=[10, 8], dpi=300)
labels = ['test']*len(compressed_runs)
ticks = [i+1 for i, v in enumerate(compressed_runs)]

plt.xticks(ticks, labels, rotation='vertical')
fig.axes[0].set_xticklabels(labels)
plt.ylabel('communication times [µs]')
plt.title('Test title')

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.savefig(plotname)
plt.close()

模糊的 x-ticks

正如您在图中看到的,枚举的 x-ticks 仍然从命名的 x-ticks 下方显示出来。在这种情况下,我希望每个箱线图下只有“测试”。

标签: pythonmatplotliblabelboxplotaxes

解决方案


问题原来是函数调用的顺序。plt.xticks(ticks, labels)应该在创建箱线图之后调用,而不是之前。数字刻度是箱线图的默认行为,它被打印在之前明确设置的标签上。在工作代码中,我有:

plt.boxplot(compressed_runs.values(), showfliers=False)
plt.xticks(ticks, labels, rotation='vertical')

代替

plt.xticks(ticks, labels, rotation='vertical')
plt.boxplot(compressed_runs.values(), showfliers=False)

推荐阅读