减少两个箱图之间的距离

Fil*_*eia 9 matplotlib

我正在使用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"))
Run Code Online (Sandbox Code Playgroud)

这是一个更接近我想要在视觉上得到的例子(虽然我不介意盒子图是否彼此更接近):

在此输入图像描述

tac*_*ell 11

您可以更改绘图的宽高比或使用widthskwarg (doc):

ax.boxplot([values_cg, values_eg], widths=1)
Run Code Online (Sandbox Code Playgroud)

使箱子更宽.


ask*_*han 4

尝试使用更改纵横比

\n\n
ax.set_aspect(1.5) # or some other float\n
Run Code Online (Sandbox Code Playgroud)\n\n

数字越大,绘图应该越窄(越高):

\n\n
\n

一个圆将被拉伸,使得高度乘以num宽度。aspect=1是相同的aspect=\xe2\x80\x99equal\xe2\x80\x99

\n
\n\n

http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect

\n

  • 为了澄清,可以通过调整比例(使用“aspect”或“figsize”)或*x*轴的限制(使用“xlim”或“缩放”)来更改框之间的“表观”距离。框之间的“真实”距离(很像任何散点图上的点)不能从其固定的 *x* 值(本例中为“1, 2, ...”)更改。这也会使盒子变窄,因此 Filipe 建议改变它们的宽度也是明智的。我不确定这两者会如何影响您的 *y* 轴刻度和标签,@b00n12。我建议调整纵横比和箱线图宽度的参数。 (2认同)