Seaborn:改变kdeplot中的线条样式

时间:2018-04-05 11:18:00

标签: python matplotlib seaborn

我正在使用seaborn创建一个边缘分布的kdeplot,如this answer中所述。我稍微调整了一下代码来给我这个:

 @RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestBody Map<String,Object> body) {
        return customerService.requestOTP(body.get("idNumber").toString(), body.get("applicationId").toString());

enter image description here

无法以黑白打印。 我怎样才能让seaborn以特定样式(点线/虚线/ ...)方式打印kdeplot和distplot线条,以便在黑白打印时区分它们?

related questions处理其他类型的图表似乎支持此功能,但kdeplotdistplot似乎不支持此功能。

2 个答案:

答案 0 :(得分:3)

边缘人

要显示具有不同线型的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参数无效。 2D kdeplot是contour图。因此,您需要使用contour的{​​{1}}(不是linestyles)参数。

s

完整代码

sns.kdeplot(, linestyles="--")

enter image description here

答案 1 :(得分:2)

sns.kdeplot无法识别的任何关键字都会传递到plt.contour()plt.contourf()。在您的情况下,它是contourf,因此您可以传递关键字linestyles(请注意复数)。 sns.distplot有一个名为kde_kws的关键字,它接受传递给plt.plot的关键字字典。在这种情况下,您可以使用lslinestyle(请注意单数)。以下是一个完整的例子:

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="Greys",
    shade=False, shade_lowest=False, ax=g.ax_joint,
    linestyles='--'
)
sns.kdeplot(
    virginica.sepal_width, virginica.sepal_length, cmap="Greys",
    shade=False, shade_lowest=False, ax=g.ax_joint,
    linestyles=':'
)
sns.distplot(
    setosa.sepal_width, kde=True, hist=False, color="k",
    kde_kws=dict(ls ='--'), ax=g.ax_marg_x
)
sns.distplot(
    virginica.sepal_width, kde=True, hist=False, color="k",
    kde_kws=dict(ls=':'), ax=g.ax_marg_x
)
sns.distplot(
    setosa.sepal_length, kde=True, hist=False, color="k",
    kde_kws=dict(ls ='--'), ax=g.ax_marg_y, vertical=True
)
sns.distplot(
    virginica.sepal_length, kde=True, hist=False, color="k",
    kde_kws=dict(ls=':'), ax=g.ax_marg_y, vertical=True
)
plt.show()

结果如下:

result of the above code