1

早上好,

我在使用 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 个,我想严格分开它们,但同时我希望条形图彼此相邻),否则它看起来会很难看。

这是代码的结果图像 在此处输入图像描述

谢谢你如果你有任何提示

4

1 回答 1

3

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

带有 sharex=False 的 catplot

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

UserWarning:设置sharex=Falsewithcolor=None可能会导致不同级别的x变量共享颜色。这将在未来的版本中改变。

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

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

catplot 与 sharex=False 并使用 hue=x

于 2021-10-25T07:55:03.560 回答