我正在使用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"))
这是一个更接近我想要在视觉上得到的例子(虽然我不介意盒子图是否彼此更接近):
答案 0 :(得分:10)
答案 1 :(得分:3)
尝试使用
更改宽高比ax.set_aspect(1.5) # or some other float
数字越大,情节越窄(越高):
将拉伸圆圈,使其高度为宽度的
num
倍。aspect=1
与aspect=’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])