我正在使用 seaborn 创建一个边缘分布的 kdeplot,如 this answer 中所述。 .我稍微调整了代码,得到了这个:
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
virginica = iris.loc[iris.species == "virginica"]
g = sns.JointGrid(x="sepal_width", y="petal_length", data=iris)
sns.kdeplot(setosa.sepal_width, setosa.sepal_length, cmap="Reds",
shade=False, shade_lowest=False, ax=g.ax_joint)
sns.kdeplot(virginica.sepal_width, virginica.sepal_length, cmap="Blues",
shade=False, shade_lowest=False, ax=g.ax_joint)
sns.distplot(setosa.sepal_width, kde=True, hist=False, color="r", ax=g.ax_marg_x)
sns.distplot(virginica.sepal_width, kde=True, hist=False, color="b", ax=g.ax_marg_x)
sns.distplot(setosa.sepal_length, kde=True, hist=False, color="r", ax=g.ax_marg_y, vertical=True)
sns.distplot(virginica.sepal_length, kde=True, hist=False, color="b", ax=g.ax_marg_y, vertical=True)
plt.show()
黑白打印是不可能的。 如何让 seaborn 以特定样式(虚线/虚线/...)打印 kdeplot 和 distplot 线,以便在黑白打印时区分它们?
related questions处理似乎支持这一点的其他类型的图,但这似乎不受 kdeplot 支持和 distplot .
边距
要使用不同的线型显示 kde 绘图的线条,您可以使用 linestyle
参数,该参数会传递给 matplotlib 的绘图函数。
sns.kdeplot(setosa.sepal_width, color="r", ax=g.ax_marg_x, linestyle="--")
要为通过 distplot
生成的 kde 图提供此参数,您可以使用 kde_kws
参数。
sns.distplot(..., kde_kws={"linestyle":"--"})
但是,似乎没有任何理由在这里使用 distplot。
联合KDE
对于 2D 情况,linestyle 参数无效。二维 kdeplot 是一个 contour
图。因此,您需要使用 contour
的 linestyles
(而不是 s
)参数。
sns.kdeplot(, linestyles="--")
完整代码
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
virginica = iris.loc[iris.species == "virginica"]
g = sns.JointGrid(x="sepal_width", y="petal_length", data=iris)
sns.kdeplot(setosa.sepal_width, setosa.sepal_length, cmap="Reds",
shade=False, shade_lowest=False, ax=g.ax_joint, linestyles="--")
sns.kdeplot(virginica.sepal_width, virginica.sepal_length, cmap="Blues",
shade=False, shade_lowest=False, ax=g.ax_joint, linestyles=":")
sns.kdeplot(setosa.sepal_width, color="r", legend=False,
ax=g.ax_marg_x, linestyle="--")
sns.kdeplot(virginica.sepal_width, color="b", legend=False,
ax=g.ax_marg_x, linestyle=":")
sns.kdeplot(setosa.sepal_length, color="r", legend=False,
ax=g.ax_marg_y, vertical=True, linestyle="--")
sns.kdeplot(virginica.sepal_length, color="b", legend=False,
ax=g.ax_marg_y, vertical=True, linestyle=":")
plt.show()
我是一名优秀的程序员,十分优秀!