使用 seaborn 和 catplot 进行子绘图

subplotting with seaborn and catplot

早上好,

我在使用 seaborn 的 bar catplot 绘制子图时遇到了一个小问题

这里有一个小例子来说明:

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 轴上 y 轴上有 0.0 的条目出现。有办法吗?因为真实的例子比这更复杂。我在 x 轴上至少有 10 个条目(每个“类型”中有 5 个条目,我想将它们严格分开,但同时我希望条形图彼此相邻),否则看起来会很难看。

这是代码的结果图像

谢谢大家的指点

默认情况下,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)

请注意,这会生成警告(我正在使用 Seaborn 0.11.2 进行测试):

UserWarning: Setting sharex=False with color=None may cause different levels of the x variable to share colors. This will change in a future version.

这意味着子图是独立生成的,这可能会使着色混乱。在示例中,“A”条在第一个子图中为蓝色,在第二个子图中为橙色。 您可以通过将“x”也用于“色调”来解决此问题,从而获得一致的颜色。在这种情况下,dodge=False 将只在每个 x 位置放置一个柱状图。

sns.catplot(x="x", y="y", data=df, col="z", kind="bar", sharex=False, hue="x", dodge=False)