我在 python 3.x 中使用 sns.boxplot
和 pandas.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 )
输出图:
dataframe.boxplot("value" ,by = "name" )
输出图2:
最佳答案
两个框之间的距离由 x 轴范围决定。对于框之间数据单元的恒定距离,使它们间隔或多或少分开的是该数据单元距离与轴上显示的整体数据空间相比的分数。 例如,在 seaborn 的情况下,第一个盒子位于 x=0,第二个盒子位于 x=1。差值为 1 个单位。因此,通过将 x 轴限制设置为这些精确限制,可以实现两个箱线图之间的最大距离,
ax.set_xlim(0, 1)
当然,这会减少每个盒子的一半。
所以更有用的值是 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()
关于python - 在 python 箱线图中调整 X 轴上的间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260842/