Seaborn - 带有 hue 的 KDE 子图
Seaborn - KDE subplots with hue
如标题所述,我正在尝试创建 4 个 matplotlib 子图,在每个子图中,我都想绘制一个 KDE 绘图色调,由我的数据框中的一列绘制。我找到了 "kind of" 的方法,代码如下:
ScoreDiffMinus1 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -1]
ScoreDiffMinus2 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -2]
ScoreDiffMinus3 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -3]
ScoreDiffMinus4 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -4]
fg, ax = plt.subplots(2,2, figsize = (20,12.5), sharex=True, sharey=True)
Face1 = sns.FacetGrid(ScoreDiffMinus1, hue="Product")
G1 = Face1.map(sns.kdeplot, 'DateDifference', ax = ax[0,0])
Face2 = sns.FacetGrid(ScoreDiffMinus2, hue="Product")
G2 = Face2.map(sns.kdeplot, 'DateDifference', ax = ax[0,1])
Face3 = sns.FacetGrid(ScoreDiffMinus3, hue="Product")
G3 = Face3.map(sns.kdeplot, 'DateDifference', ax = ax[1,0])
Face4 = sns.FacetGrid(ScoreDiffMinus4, hue="Product")
G4 = Face4.map(sns.kdeplot, 'DateDifference', ax = ax[1,1])
这种方法的问题是我 运行 同时是 FacetGrid 和 Matplotlib 子图,这意味着我有 4 个图表,下面我有 4 个来自 FacetGrid 的空图表。这也意味着我无法像 运行 一个简单的 KDE 绘图那样设置 xlabels、标题等。
有更好的方法吗?我觉得我遗漏了一些明显的东西,但上面的方法对我来说并不奏效。
谢谢
下面的呢
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
p = np.random.choice(["Fan", "Table", "Ball"], size=100)
sd = np.random.randint(-4,0,size=100)
dd = np.random.randint(0,40,size=100)
df = pd.DataFrame({'ScoreDifference': sd ,
'DateDifference': dd ,
"Product": p})
grid = sns.FacetGrid(df, col='ScoreDifference', hue="Product", col_order=range(-4,0)[::-1])
grid.map(sns.kdeplot, 'DateDifference')
grid.add_legend()
plt.show()
如标题所述,我正在尝试创建 4 个 matplotlib 子图,在每个子图中,我都想绘制一个 KDE 绘图色调,由我的数据框中的一列绘制。我找到了 "kind of" 的方法,代码如下:
ScoreDiffMinus1 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -1]
ScoreDiffMinus2 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -2]
ScoreDiffMinus3 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -3]
ScoreDiffMinus4 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -4]
fg, ax = plt.subplots(2,2, figsize = (20,12.5), sharex=True, sharey=True)
Face1 = sns.FacetGrid(ScoreDiffMinus1, hue="Product")
G1 = Face1.map(sns.kdeplot, 'DateDifference', ax = ax[0,0])
Face2 = sns.FacetGrid(ScoreDiffMinus2, hue="Product")
G2 = Face2.map(sns.kdeplot, 'DateDifference', ax = ax[0,1])
Face3 = sns.FacetGrid(ScoreDiffMinus3, hue="Product")
G3 = Face3.map(sns.kdeplot, 'DateDifference', ax = ax[1,0])
Face4 = sns.FacetGrid(ScoreDiffMinus4, hue="Product")
G4 = Face4.map(sns.kdeplot, 'DateDifference', ax = ax[1,1])
这种方法的问题是我 运行 同时是 FacetGrid 和 Matplotlib 子图,这意味着我有 4 个图表,下面我有 4 个来自 FacetGrid 的空图表。这也意味着我无法像 运行 一个简单的 KDE 绘图那样设置 xlabels、标题等。
有更好的方法吗?我觉得我遗漏了一些明显的东西,但上面的方法对我来说并不奏效。
谢谢
下面的呢
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
p = np.random.choice(["Fan", "Table", "Ball"], size=100)
sd = np.random.randint(-4,0,size=100)
dd = np.random.randint(0,40,size=100)
df = pd.DataFrame({'ScoreDifference': sd ,
'DateDifference': dd ,
"Product": p})
grid = sns.FacetGrid(df, col='ScoreDifference', hue="Product", col_order=range(-4,0)[::-1])
grid.map(sns.kdeplot, 'DateDifference')
grid.add_legend()
plt.show()