如何在分布图中添加垂直线

63

使用seaborn.pydata.orgPython DataScience Handbook中的示例,我能够使用以下代码片段生成一个组合分布图:

代码:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# some settings
sns.set_style("darkgrid")

# Create some data
data = np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size=2000)
data = pd.DataFrame(data, columns=['x', 'y'])

# Combined distributionplot
sns.distplot(data['x'])
sns.distplot(data['y'])

情节: 输入图像描述

我如何将此设置与垂直线相结合,以便我可以说明如下的阈值:

enter image description here

我知道可以像这个链接中使用matplotlib来做,但是我真的很喜欢seaborn图的简洁性,想知道是否有更优雅的方法来实现它(是的,我知道seaborn是在matplotlib基础上建立的)。


1
这里有一个相关的答案,因为seabornmatplotlib的API。如何在给定的图中绘制垂直线条? - Trenton McKinney
这是一个duplicate,因为plt.axvline已经被覆盖(2014年7月28日)。这里的实现并没有不同,因为它是一个分布,或者seaborn(distplot已被删除)。此外,在重复内容中有更好的描述和更多选项。 - Trenton McKinney
1个回答

98

只需使用

plt.axvline(2.8, 0,0.17)

对于另一条线也是同样的操作。

在这里,您可以使用某些变量(例如maxx = max(data)或类似内容)放置您分布的最大值,而不是0.17。2.8是x轴上的位置。请记住,y值必须在0和1之间,其中1是绘图的顶部。您可以相应地重新调整您的值。另一个明显的选项是

plt.plot([2.8, 2.8], [0, max(data)])

1
希望可以问一个小问题……你知道如何添加标题(和副标题)吗?我在使用sns.distplot?时没有看到任何这样的选项。 - vestland
2
plt.title("Title") 和 plt.suptitle("Sub title") - Sheldore
7
我必须承认,我很想删除这个问题,因为它变成了一个负分磁铁。但是你的建议真正地让我摆脱了一个错误的假设,即我在某种程度上被绑定在sns.distplot的参数范围内,无法直接使用plt.title()等方法。对我来说,这对于seaborn和matplotlib来说是一个真正的游戏规则改变者。所以再次感谢你的帮助! - vestland
8
请注意,plt.axvline(x)会在x值处绘制一条覆盖整个图高度的垂直线。您还可以设置线条颜色、线条样式等,请参见 https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.axvline.html。 - Michel Floyd
5
如何为distplot图中的线和垂直线添加图例? - Newbielp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接