python - 在 python 箱线图中调整 X 轴上的间距

标签 python matplotlib plot

我在 python 3.x 中使用 sns.boxplotpandas.DataFrame.boxplot 绘制箱线图。

我想问是否可以调整 boxplot 中框之间的间距,因此 Group_b 的框比输出图中的 Group_a 的框更远。谢谢

代码:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

dict_a = {'value':[1,2,3,7,8,9],'name':['Group_a']*3+['Group_b']*3}
dataframe = pd.DataFrame(dict_a)
sns.boxplot( y="value" , x="name" , data=dataframe )   

输出图:

enter image description here

dataframe.boxplot("value" ,by = "name" )

输出图2:

enter image description here

最佳答案

两个框之间的距离由 x 轴范围决定。对于框之间数据单元的恒定距离,使它们间隔或多或少分开的是该数据单元距离与轴上显示的整体数据空间相比的分数。 例如,在 seaborn 的情况下,第一个盒子位于 x=0,第二个盒子位于 x=1。差值为 1 个单位。因此,通过将 x 轴限制设置为这些精确限制,可以实现两个箱线图之间的最大距离,

ax.set_xlim(0, 1)

当然,这会减少每个盒子的一半。

enter image description here

所以更有用的值是 ax.set_xlim(0-val, 1+val) ,其中 val 位于框的宽度范围内。

需要提到的是, Pandas 使用不同的单位。第一个框在 x=1 处,第二个框在 x=2 处。因此需要类似 ax.set_xlim(1-val, 2+val) 的东西。

下面会在图中添加一个 slider 来查看不同值的效果。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

dict_a = {'value':[1,2,3,7,8,9],'name':['Group_a']*3+['Group_b']*3}
dataframe = pd.DataFrame(dict_a)

fig, (ax, ax2, ax3) = plt.subplots(nrows=3,
                                   gridspec_kw=dict(height_ratios=[4,4,1], hspace=1))

sns.boxplot( y="value" , x="name" , data=dataframe, width=0.1, ax=ax)   
dataframe.boxplot("value", by = "name", ax=ax2)


from matplotlib.widgets import Slider
slider = Slider(ax3, "", valmin=0, valmax=3)

def update(val):
    ax.set_xlim(-val, 1+val)
    ax2.set_xlim(1-val, 2+val)

slider.on_changed(update)


plt.show()

enter image description here

关于python - 在 python 箱线图中调整 X 轴上的间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260842/

相关文章:

python - 如何在 ppt 中嵌入 python 图表(或图像)并刷新它

Python3 GTK3 - 单击后立即将按钮更改为不敏感

python - fortran 库的 python 结构内部和外部 c_char 数组之间的区别

python - 在 matplotlib 图上裁剪文本

python - 如何使用跟踪 "live"更新 matplotlib 图形图

r - 如何在 R 中拆分数据集和绘图

python - 使用用户输入不断运行 Python 脚本

python - 有条件地拆分 Pandas 数据框以绘制不同的颜色

python - 将字符串 xticks 拆分为多行(matplotlib)

r - 时间序列绘图范围