Python sns.catplot,闭合钢筋之间的间隙

Python sns.catplot,闭合钢筋之间的间隙,python,matplotlib,seaborn,legend,Python,Matplotlib,Seaborn,Legend,这是我运行此代码时得到的绘图 有没有什么方法可以缩小这两个杆之间的间隙,但不能完全接触彼此 sns.catplot(x = "case", kind = "count", data = df, alpha=0.8, palette = my_pal, hue="class") plt.ylabel("Count", size=12) plt.tight_layout() 问题似乎在于“case”和“class”列包含相同的信息,只是名称不同而已。在任何情况下,case为1,class为负值,反

这是我运行此代码时得到的绘图 有没有什么方法可以缩小这两个杆之间的间隙,但不能完全接触彼此

sns.catplot(x = "case", kind = "count", data = df, alpha=0.8, palette = my_pal, hue="class")
plt.ylabel("Count", size=12)
plt.tight_layout()

问题似乎在于“case”和“class”列包含相同的信息,只是名称不同而已。在任何情况下,case为1,class为负值,反之亦然

如果您同时使用
x
hue
,seaborn将为4列:

  • 案例1,“否定”类
  • 案例1,“绿色”类
  • 案例2,“否定”类
  • 案例2,“绿色”类
四列中有两列保持为空:

导入seaborn作为sns
将matplotlib.pyplot作为plt导入
将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame({'case':np.concatenate([np.repeat([1],3700),np.repeat([2],1200)]),
“类”:np.concatenate([np.repeat(['Negative'],3700),np.repeat(['green'],1200]))
g=sns.catplot(x=“case”,
hue='class',
调色板为蓝色,
数据=df,
kind=“count”)
plt.show()

在这种情况下,更合适的绘图是省略
hue
,直接使用类作为
x

g=sns.catplot(x='class',
调色板为蓝色,
数据=df,
种类(计数)
plt.show()

PS:为了得到与第一个图中相似的图例,可以使用xticks和xlabel。请注意,seaborn
catplot
旨在创建子地块的完整网格
g.axes[0][0]
获取第一个子批次的
ax

plt.legend(g.axes[0][0].patches,
           [l.get_text() for l in g.axes[0][0].get_xticklabels()],
           title= g.axes[0][0].get_xlabel())
g.axes[0][0].set_xticks([])  # remove the xticks (now in legend)
g.axes[0][0].set_xlabel('')  # remove the xlabel (now title of legend)

条之间的间隙足以容纳两个附加条,每个色调值对应一个。对于x=0和色调为“绿色”,计数(y)为0。同样,对于x=1和色调为“负”,计数为0。如果这两个值不为零,您是否希望空间按原样显示?@BalooRM是的,如果这两个值不为零,我想删除为这些情况保存的空间。@JohanC是的,我想这可以归结为数据可视化的美学,但是改变相对于x轴上标签的位置可能会令人困惑。这些零值总是零吗?如果您的目的是用不同的颜色标记绿色组和负片组,您可以查看堆叠柱状图。非常感谢您,但是您知道如何在第二个绘图上添加与第一个绘图相同的图例吗?我添加了一种添加图例的方法(并删除xticks和xlabel)