0

我正在使用 seaborn 生成 5 种不同条件及其对应值的箱线图。我希望根据它们的实际值而不是均匀间隔的箱线图,将 x 轴值绘制在彼此之间正确的距离内。我有一个大数据集,但为了简化我的问题,我用较小的数据集编造了一些数字。我有以下代码:

dff=pd.DataFrame()
dff['Concentration']=[150,150,150,150,300,300,300,300,525,525,525,525,600,600,600,600,650,650,650,650]
dff['Counts']=[0.677,0.703,0.800,0.705,1.0,0.906,1.11,0.877,1.255,1.38,1.25,1.38,1.4,1.5,1.6,1.667,1.65,1.66,1.70,1.599]

figxyz,ax=plt.subplots(1,1,figsize=(4,4))
sns.boxplot(dff['Concentration'],dff['Counts'],color='tan')
sns.swarmplot(dff['Concentration'],dff['Counts'],color='black')

我得到以下箱线图。我希望浓度之间的距离与实际数字之间的距离相对应。例如,150 到 300 箱线图之间的距离应该小于 300 到 525 之间的距离,最小距离应该在 600 到 650 之间。

我还尝试使用以下代码,它似乎移动了 x-ticks,但像这样将箱形图一直聚集在左侧。

ax.set_xticks(dff['Concentration']) 
4

1 回答 1

1

您可能必须使用 matplotlibboxplot()而不是 seaborn:

data = {k:v.values for k,v in dff.groupby('Concentration')['Counts']}

fig, ax = plt.subplots()
ax.boxplot(x=data.values(), positions=list(data.keys()), widths=50, sym='')
ax.plot(dff['Concentration'],dff['Counts'],'o')

在此处输入图像描述

于 2020-11-25T08:43:14.270 回答