使用seaborn,如何将垂直线添加到分布图(sns.distplot)

ves*_*and 16 python plot matplotlib seaborn

使用seaborn.pydata.orgPython DataScience手册中的示例,我可以使用以下代码段生成组合分布图:

码:

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'])
Run Code Online (Sandbox Code Playgroud)

情节: 在此输入图像描述

如何将此设置与垂直线组合,以便我可以说明这样的阈值:

在此输入图像描述

我知道我可以用matplotlib这样做动态直方图子图用线标记目标,但我真的很喜欢seaborn情节的简单性,并且真的想知道是否可以更优雅地做到这一点.(是的,我知道seaborn建立在顶级matplotlib上)

谢谢你的任何建议!

She*_*ore 23

只是用

plt.axvline(2.8, 0,0.17)
Run Code Online (Sandbox Code Playgroud)

对于另一条线也一样

在这里,您可以使用某些变量(例如maxx = max(data)类似的东西)来代替0.17,而不是0.17 .2.8是x轴上的位置.哦,请记住,y值必须介于0和1之间,其中1是曲线的顶部.您可以相应地重新调整您的值.另一个明显的选择很简单

plt.plot([2.8, 2.8], [0, max(data)])
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“plt.axvline(x)”将在 x 值处在绘图的整个高度上绘制一条条。您还可以设置线条颜色、线条样式等...请参阅https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.axvline.html (6认同)
  • 我不得不承认我很想删除这个问题,因为它原来是一个downvote 磁铁。但是你的建议真的让我摆脱了一个错误的假设,即我以某种方式绑定到 sns.distplot 的参数并且无法直接使用诸如 plt.title() 之类的方法。对我来说,这对 seaborn 和 matplotlib 来说是一个真正的游戏规则改变者。所以再次感谢您的帮助! (3认同)
  • plt.title("Title")和plt.suptitle("Sub title") (2认同)