我可以使用jointplot绘制两个变量的联合分布。但是,我找不到一种方法来添加在两个维度上都显示特定值的任意行。
例如,下面的代码可以很好地显示联合分布和边缘分布
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(color_codes=True)
tips = sns.load_dataset("iris")
plot = sns.jointplot(x="sepal_length", y="sepal_width", data=tips,
kind="kde")但是,我找不到一种方法来在预先指定的值上包含特定的垂直线和水平线。例如,包括
plt.plot([6, 1.5], [6, 5], color="skyblue", lw=5, linestyle='solid', label="_not in legend")在其中一个边框上生成一行,但在jointplot上不生成任何内容。有没有一种方法可以让我在sepal_length和sepal_width的特定值处添加垂直线和水平线?(例如,垂直线在6处,水平线在3处),更一般地说,是否可以基于数据的特定统计数据来制作这些线条?(平均值,不同变量的中位数)
谢谢,
发布于 2019-05-29 17:26:38
您可以使用ax_join修改连接图的主轴。通过该命令,您可以使用标准的matplotlib.pyplot命令,如axvline和axhline:
import seaborn as sns
sns.set(color_codes=True)
tips = sns.load_dataset("iris")
plot = sns.jointplot(x="sepal_length",y="sepal_width",data=tips,kind="kde")
plot.ax_joint.axvline(x=6)
plot.ax_joint.axhline(y=3)
plot.ax_joint.set_xlim(4,8)
plot.ax_joint.set_ylim(2,4.5)实际上,您还可以绘制一条概括线,而不仅仅是一个常量:
plot.ax_joint.plot([4,8], [2,5], 'b-', linewidth = 2)对于使用统计数据的常量行,您可以使用pandas数据帧属性:
plot.ax_joint.axvline(x=tips.sepal_length.median(),linestyle='--')
plot.ax_joint.axhline(y=tips.sepal_width.mean(),linestyle='--')您还可以使用marg_x和marg_y将行添加到边际分布:
plot.ax_marg_x.axvline(x=6)
plot.ax_marg_y.axhline(y=3)它看起来是这样的:

https://stackoverflow.com/questions/56116021
复制相似问题