Matplotlib 缩小两个箱线图之间的距离

Matplotlib 缩小两个箱线图之间的距离,matplotlib,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

我正在使用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"))
这是一个更接近我想要的视觉效果的例子(尽管我不介意箱线图之间是否更接近):


您可以更改绘图的纵横比,也可以使用
宽度
kwarg:


要使长方体更宽。

请尝试使用更改纵横比

ax.set_aspect(1.5) # or some other float
数字越大,绘图越窄(越高):

将拉伸一个圆,使其高度
num
乘以宽度
aspect=1
aspect='equal'
相同

当代码写入时:

ax.set_xticks(np.arange(len(xlabels))+1)
您将第一个方框图放在0上,第二个方框图放在1上(尽管之后更改了勾号标签),就像您给出的第二个“通缉”示例一样,它们设置为1,2,3。 所以我认为另一种解决方案是利用xticks的位置和情节的细节

例如使用

ax.set_xlim(-1.5,2.5)

将它们放得更近。

位置:
类似数组,可选

设置框的位置。刻度和限制将自动设置为与位置匹配。默认为范围(1,N+1),其中N是要绘制的框数


这应该能行

这是我尝试过的第一种方法,但运气不好。我认为原因是刻度之间的空间总是相对于可用的空间。因此,如果我将刻度移近原点,右侧将有更多的可用空间,绘图也将“放大”以获取可用空间。至于
xlim()
,它只允许控制从刻度到原点的空间,而不允许控制刻度之间的空间。我选择这个作为答案,因为设置纵横比确实是我所缺少的,但最终解决方案还意味着改变方框的宽度,根据@tcaswell的回答,这实际上完全弄乱了y记号和y标签,因为它只是在放大。实际上,它并没有像人们要求的那样减少方框图之间的距离。为了澄清这一点,可以通过调整比例(使用
aspect
figsize
)或x轴限制(使用
xlim
或“缩放”)来改变方框之间的明显距离。框之间的真实距离(很像散点图上的点)不能从其固定的x值更改(
1,2,…
)。这也会使盒子变窄,因此菲利佩建议改变盒子的宽度也是明智的。我不确定这两种方法会如何影响y轴刻度和标签@b00n12。我建议调整纵横比和箱线图宽度的参数。是的,我已经解决了,谢谢。我只是想指出,这并不能真正回答问题。你的评论实际上是完全正确的!请从链接中引用相关内容。这使得你的答案更容易阅读,一旦链接断开,相关内容就会留在你的答案上。嗨,Joooeey。。请建议最好的方法。。非常感谢。
ax.set_xlim(-1.5,2.5)