python - 如何在 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 下方显示出来。在这种情况下,我希望每个箱线图下只有“测试”。
解决方案
问题原来是函数调用的顺序。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)
推荐阅读
- ios - 在 ios 应用程序(如 facebook)中打开任意 http 页面
- python - 什么可能导致 -->TypeError: float() 参数必须是字符串或数字,而不是“方法”
- htmx - 定居在 HTMX
- kubernetes - Kubernetes pod fluentd 转发到 fluentd DaemonSet
- lint - 有人知道如何修复 StandardJS Linter 错误吗?
- c - ctypes 结构奇怪的行为?
- google-cloud-platform - 如何将每个用户的请求始终分配给实例组中的同一个实例?
- python - 将 html 代码/变量从 Flask 发送到 HTML
- python - 测试中的更改未拉入应用程序上下文
- twig - 如何比较树枝中的日期