早上好,
我有个小问题,就是用海运的条形图进行分图。
下面是一个很小的例子来说明:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
y = [1.0, 5.5, 2.2, 9.8]
x = ["A", "B", "A", "B"]
z = ["type1", "type2", "type1", "type2"]
df = pd.DataFrame(x, columns=["x"])
df["y"] = y
df["z"] = z
print(df)
sns.catplot(x="x", y="y", data=df, col="z", kind="bar")
plt.show()我的问题是,我希望x轴中有0.0在y轴中的条目不出现。有办法吗?因为真正的例子比这个更复杂。我在x轴上至少有10个条目(每个“类型”中有5个条目,我想严格地将它们分开,但同时我希望条形图彼此相邻),否则看起来会很难看。
下面是代码的结果映像

如果你有什么建议,谢谢
发布于 2021-10-25 07:55:03
默认情况下,x轴是共享的.您可以设置sharex=False来防止这种情况发生。
我对示例数据做了一些扩展,以说明着色是如何工作的。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
y = [1.0, 5.5, 2.2, 9.8, 3, 4]
x = ["A", "B", "A", "B", "C", "A"]
z = ["type1", "type2", "type1", "type2", "type1", "type2"]
df = pd.DataFrame({"x": x, "y": y, "z": z})
sns.catplot(x="x", y="y", data=df, col="z", kind="bar", sharex=False)

请注意,这将生成一个警告(我正在使用Seborn0.11.2进行测试):
UserWarning:使用
color=None设置sharex=False可能会导致x变量的不同级别共享颜色。这将在未来的版本中改变。
这意味着子图是独立生成的,这可能会使着色混淆。在示例中,"A“条在第一个子图中是蓝色的,在第二个子图中是橙色的。您可以通过使用"x“也用于”色调“来解决这一问题,从而得到一致的颜色。在这种情况下,dodge=False只会在每个x位放一条。
sns.catplot(x="x", y="y", data=df, col="z", kind="bar", sharex=False, hue="x", dodge=False)

https://stackoverflow.com/questions/69704134
复制相似问题