我可以使用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),更一般而言,是否可以根据数据的特定统计信息来制作这些线? (平均值,不同变量的中位数)。
谢谢
答案 0 :(得分:0)
您可以使用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)
它看起来像这样: