10

我正在使用 python 和 matplotlib 绘制如下所示的 bloxplot。有什么办法可以减少 X 轴上两个箱线图之间的距离?

在此处输入图像描述

这是我用来获取上图的代码:

import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['ytick.direction'] = 'out'
rcParams['xtick.direction'] = 'out'

fig = plt.figure()
xlabels = ["CG", "EG"]
ax = fig.add_subplot(111)
ax.boxplot([values_cg, values_eg])
ax.set_xticks(np.arange(len(xlabels))+1)
ax.set_xticklabels(xlabels, rotation=45, ha='right')
fig.subplots_adjust(bottom=0.3)
ylabels = yticks = np.linspace(0, 20, 5)
ax.set_yticks(yticks)
ax.set_yticklabels(ylabels)

ax.tick_params(axis='x', pad=10)
ax.tick_params(axis='y', pad=10)

plt.savefig(os.path.join(output_dir, "output.pdf"))

这是一个更接近我想要在视觉上获得的示例(尽管我不介意箱线图是否更接近彼此):

在此处输入图像描述

4

5 回答 5

12

您可以更改绘图的纵横比或使用widthskwarg (doc)

ax.boxplot([values_cg, values_eg], widths=1)

使盒子更宽。

于 2013-04-30T14:50:29.557 回答
4
于 2013-04-30T14:51:12.360 回答
1

当您的代码写入时:

ax.set_xticks(np.arange(len(xlabels))+1)

您将第一个箱线图放在 0 上,将第二个箱线图放在 1 上(尽管之后您更改了刻度标签),就像在第二个“想要的”示例中一样,您将它们设置在 1、2、3 上。所以我认为另一种解决方案是使用 xticks 位置和情节的xlim

例如使用

ax.set_xlim(-1.5,2.5)

会让它们更靠近。

于 2013-04-30T15:31:16.467 回答
0

正如@Stevie 提到的,您可以使用positionskwarg (doc)手动设置框的 x 坐标:

ax.boxplot([values_cg, values_eg], positions=[1, 1.3])
于 2021-06-17T21:44:01.133 回答
0

positions :类数组,可选

设置框的位置。刻度线和限制会自动设置以匹配位置。默认为 range(1, N+1) 其中 N 是要绘制的框数。

https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.boxplot.html

这应该做的工作!

于 2020-10-22T08:23:32.967 回答