Ech*_*han 3 python plot matplotlib
我在 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 )
Run Code Online (Sandbox Code Playgroud)
输出图:
dataframe.boxplot("value" ,by = "name" )
Run Code Online (Sandbox Code Playgroud)
输出图 2:
两个框之间的距离由 x 轴限制确定。对于框之间数据单元的恒定距离,使它们或多或少分开的原因是该数据单元距离与轴上显示的整体数据空间相比的分数。例如,在 seaborn 的情况下,第一个框位于 x=0,第二个框位于 x=1。相差1个单位。因此,通过将 x 轴限制设置为这些精确限制来实现两个箱线图之间的最大距离,
ax.set_xlim(0, 1)
Run Code Online (Sandbox Code Playgroud)
当然,这会减少每个盒子的一半。
所以更有用的值将是ax.set_xlim(0-val, 1+val)
与val
是在所述箱的宽度的范围内的某处。
需要提到的是,pandas 使用不同的单位。第一个框在 x=1 处,第二个框在 x=2 处。因此,人们需要像ax.set_xlim(1-val, 2+val)
.
下面将向绘图添加一个滑块以查看不同值的效果。
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()
Run Code Online (Sandbox Code Playgroud)