首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在seaborn jointplot上添加任意线条

在seaborn jointplot上添加任意线条
EN

Stack Overflow用户
提问于 2019-05-14 00:01:50
回答 1查看 3.7K关注 0票数 5

我可以使用jointplot绘制两个变量的联合分布。但是,我找不到一种方法来添加在两个维度上都显示特定值的任意行。

例如,下面的代码可以很好地显示联合分布和边缘分布

代码语言:javascript
复制
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")

但是,我找不到一种方法来在预先指定的值上包含特定的垂直线和水平线。例如,包括

代码语言:javascript
复制
plt.plot([6, 1.5], [6, 5], color="skyblue", lw=5, linestyle='solid', label="_not in legend")

在其中一个边框上生成一行,但在jointplot上不生成任何内容。有没有一种方法可以让我在sepal_length和sepal_width的特定值处添加垂直线和水平线?(例如,垂直线在6处,水平线在3处),更一般地说,是否可以基于数据的特定统计数据来制作这些线条?(平均值,不同变量的中位数)

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 17:26:38

您可以使用ax_join修改连接图的主轴。通过该命令,您可以使用标准的matplotlib.pyplot命令,如axvline和axhline:

代码语言:javascript
复制
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)

实际上,您还可以绘制一条概括线,而不仅仅是一个常量:

代码语言:javascript
复制
plot.ax_joint.plot([4,8], [2,5], 'b-', linewidth = 2)

对于使用统计数据的常量行,您可以使用pandas数据帧属性:

代码语言:javascript
复制
plot.ax_joint.axvline(x=tips.sepal_length.median(),linestyle='--')
plot.ax_joint.axhline(y=tips.sepal_width.mean(),linestyle='--')

您还可以使用marg_x和marg_y将行添加到边际分布:

代码语言:javascript
复制
plot.ax_marg_x.axvline(x=6)
plot.ax_marg_y.axhline(y=3)

它看起来是这样的:

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56116021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档