减少两个箱图之间的距离

时间:2013-04-30 14:44:57

标签: matplotlib

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

enter image description here

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

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"))

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

enter image description here

5 个答案:

答案 0 :(得分:10)

您可以更改绘图的宽高比,也可以使用widths kwarg (doc)

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

使箱子更宽。

答案 1 :(得分:3)

尝试使用

更改宽高比
ax.set_aspect(1.5) # or some other float

数字越大,情节越窄(越高):

  

将拉伸圆圈,使其高度为宽度的num倍。 aspect=1aspect=’equal’相同。

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

答案 2 :(得分:1)

代码写入时:

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

你把第一个方块图放在0上,第二个方框放在1上(事件虽然你事后更改了标记标签),就像在第二个“想要”的例子中你给它们设置在1,2, 3。 所以我认为另一种解决方案是使用xticks位置和情节的xlim

例如使用

ax.set_xlim(-1.5,2.5)

会让他们更接近。

答案 3 :(得分:0)

positions :类似数组,可选

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

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

这应该完成工作!

答案 4 :(得分:0)

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

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