【问题标题】:How Do I Overlay a (x,y) Plot onto a Boxplot in Python with Correct X-ticks?如何在 Python 中使用正确的 X-ticks 将 (x,y) 图叠加到箱线图上?
【发布时间】:2020-09-13 22:29:00
【问题描述】:

我正在尝试将箱线图与线图结合起来。我能够让两种不同的绘图类型一起出现在同一个图形上,并使箱线图位于正确的 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 and boxplot

任何帮助将不胜感激。谢谢!!!!

【问题讨论】:

  • 您是否尝试过将ax2.set_xlimax2.set_xticks 显式设置为与ax1 相同的值?我知道你不应该这样做,但是......?
  • 另外,如果你使用相同的 ylim,为什么还要使用 twinx

标签: python python-3.x matplotlib plot boxplot


【解决方案1】:

默认情况下,箱线图会更改刻度位置以及标签及其格式。您可以通过参数manage_ticks=False 来抑制它。

(可选)您还可以显式设置a locator and a formatter,例如MultipleLocatorScalarFormatter。请注意,在这种情况下,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()

【讨论】:

  • 非常感谢!这是我第一次用 Python 制作箱线图,这很有帮助。我也会看看其他选项。
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多