python - 如何在 Python 中使用正确的 X-ticks 将 (x,y) 图叠加到箱线图上?
问题描述
我正在尝试将箱线图与线图结合起来。我能够让两种不同的绘图类型一起出现在同一个图中,并使箱线图位于正确的 x 位置。但是,我想调整 x 刻度,以便定期跨越整个 x 轴。我没有任何运气使用 xlim 和 xticks 来更改刻度位置——我认为箱形图把事情搞砸了。我试过分别叠加图,但我仍然没有任何运气。下面你可以看到我试图实现的代码来覆盖这两个图。
h = [0.39, 0.48, 0.58, 0.66, 0.78, 0.94]
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(h, avg00, '--ko', label='GSE')
ax2.boxplot(phi00, widths=0.05, positions=h, showmeans=True)
ax1.set_xticks(np.arange(0.3, 1.1, 0.1))
ax1.set_xlim(0.3,1.0)
ax1.set_ylim(74,79)
ax2.set_ylim(74,79)
ax2.set_yticks([])
ax1.legend()
plt.show()
使用手头的数据创建以下图像: overlayed xy-plot 和 boxplot
任何帮助将不胜感激。谢谢!!!!
解决方案
默认情况下,箱线图会更改刻度位置以及标签及其格式。您可以通过参数来抑制它manage_ticks=False
。
或者,您还可以显式设置定位器和格式化程序,例如 theMultipleLocator
和ScalarFormatter
. 请注意,在这种情况下,twinx()
轴不会增加任何价值,只会使事情复杂化。
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, ScalarFormatter
import numpy as np
phi00 = np.random.normal(76.5, 0.7, (20, 6))
avg00 = phi00.mean(axis=0)
h = [0.39, 0.48, 0.58, 0.66, 0.78, 0.94]
fig, ax1 = plt.subplots()
ax1.plot(h, avg00, '--ko', label='GSE')
ax1.boxplot(phi00, widths=0.05, positions=h, showmeans=True, manage_ticks=False)
# ax1.xaxis.set_major_locator(MultipleLocator(0.1))
# ax1.xaxis.set_major_formatter(ScalarFormatter())
ax1.set_xlim(0.3, 1.0)
ax1.set_ylim(74, 79)
ax1.legend()
plt.show()
推荐阅读
- r - 如何通过“Theoph”数据集中的“主题”获得最大浓度时间?
- python - 在 python 中使用 matplolib 和多处理保存多个图像(~50k)
- java - 在 OpenLiberty 上使用 Hibernate Envers 设置自定义修订信息
- javascript - 从后台 JS 在弹出 HTML 中设置倒计时
- javascript - 如何在一页上使用此多选下拉菜单两次,以便每个实例输出到自己的数组?
- docker - 在内部进程崩溃时重新启动 Docker 容器
- python - 在浏览器中获取当前 url
- visual-studio - VIsual Studio 2019 实体数据模型向导 AssemblyFile 为空
- javascript - 无法插入带有软返回 \v 字符的文本
- python - 如何从 Python 中的文件中读取与起始模式匹配的一大块行?