如何根据分类变量将标题设置为 lmplots?
How to set titles to lmplots according to cateogorical variable?
我需要根据定性变量(性别)绘制两个定量变量的 sns lmplot。当我按如下方式添加 hue 和 col 参数时:
g = sns.lmplot(x = "exper", y = "wage", hue = "female",col = "female", data = df, sharey = False)
一切顺利。然而,我不想将每个情节命名为 female = 0 和 female = 1,而是将它们命名为 Men 和 Women。为此,我尝试了一个循环:
for i in df["female"]:
if i == 0:
g.set_titles(col_template = "Men")
else:
g.set_titles(col_template = "Women")
但它在两个地块上都产生了 Men。怎么了?
一种方法使用 g.axes[row, column].set_title(...)
.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
np.random.seed(1234)
df = pd.DataFrame({"exper": np.random.randint(1, 11, 50),
"wage": np.random.randint(100, 200, 50),
"female": np.random.randint(0, 2, 50)})
df["wage"] += df["exper"] * 10
g = sns.lmplot(x="exper", y="wage", hue="female", col="female", data=df, sharey=True)
g.axes[0, 0].set_title("Male")
g.axes[0, 1].set_title("Female")
g.axes[0, 1].tick_params(labelleft=True) # to set the ticks when sharey=True
g.fig.tight_layout()
plt.show()
另一种方法是暂时将0
重命名为male
,将1
临时重命名为female
。并将列名从 female
更改为 gender
:
df1 = df.replace({"female": {0: "male", 1: "female"}}).rename(columns={"female": "gender"})
g = sns.lmplot(x="exper", y="wage", hue="gender", col="gender", data=df1, sharey=True)
g.axes[0, 1].tick_params(labelleft=True)
g.fig.tight_layout()
plt.show()
我需要根据定性变量(性别)绘制两个定量变量的 sns lmplot。当我按如下方式添加 hue 和 col 参数时:
g = sns.lmplot(x = "exper", y = "wage", hue = "female",col = "female", data = df, sharey = False)
一切顺利。然而,我不想将每个情节命名为 female = 0 和 female = 1,而是将它们命名为 Men 和 Women。为此,我尝试了一个循环:
for i in df["female"]:
if i == 0:
g.set_titles(col_template = "Men")
else:
g.set_titles(col_template = "Women")
但它在两个地块上都产生了 Men。怎么了?
一种方法使用 g.axes[row, column].set_title(...)
.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
np.random.seed(1234)
df = pd.DataFrame({"exper": np.random.randint(1, 11, 50),
"wage": np.random.randint(100, 200, 50),
"female": np.random.randint(0, 2, 50)})
df["wage"] += df["exper"] * 10
g = sns.lmplot(x="exper", y="wage", hue="female", col="female", data=df, sharey=True)
g.axes[0, 0].set_title("Male")
g.axes[0, 1].set_title("Female")
g.axes[0, 1].tick_params(labelleft=True) # to set the ticks when sharey=True
g.fig.tight_layout()
plt.show()
另一种方法是暂时将0
重命名为male
,将1
临时重命名为female
。并将列名从 female
更改为 gender
:
df1 = df.replace({"female": {0: "male", 1: "female"}}).rename(columns={"female": "gender"})
g = sns.lmplot(x="exper", y="wage", hue="gender", col="gender", data=df1, sharey=True)
g.axes[0, 1].tick_params(labelleft=True)
g.fig.tight_layout()
plt.show()