使用 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)
早上好,
我在使用 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
withcolor=None
may cause different levels of thex
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)