我正在使用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());
无法以黑白打印。 我怎样才能让seaborn以特定样式(点线/虚线/ ...)方式打印kdeplot和distplot线条,以便在黑白打印时区分它们?
related questions处理其他类型的图表似乎支持此功能,但kdeplot和distplot似乎不支持此功能。
答案 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。
对于2D情况,linestyle参数无效。 2D kdeplot是contour
图。因此,您需要使用contour
的{{1}}(不是linestyles
)参数。
s
sns.kdeplot(, linestyles="--")
答案 1 :(得分:2)
sns.kdeplot
无法识别的任何关键字都会传递到plt.contour()
或plt.contourf()
。在您的情况下,它是contourf
,因此您可以传递关键字linestyles
(请注意复数)。 sns.distplot
有一个名为kde_kws
的关键字,它接受传递给plt.plot
的关键字字典。在这种情况下,您可以使用ls
或linestyle
(请注意单数)。以下是一个完整的例子:
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()
结果如下: