【问题标题】:Seaborn: How to add vertical lines to a distribution plot (sns.distplot)Seaborn:如何在分布图中添加垂直线 (sns.distplot)
【发布时间】:2018-09-14 15:21:28
【问题描述】:

使用seaborn.pydata.orgPython DataScience Handbook 中的示例,我可以生成具有以下sn-p 的组合分布图:

代码:

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'])

剧情:

如何将此设置与垂直线相结合,以便可以像这样说明阈值:

我知道我可以像这里 Dynamic histogram subplots with line to mark target 一样使用 matplotlib 来做到这一点,但我真的很喜欢 seaborn 情节的简单性,并且想知道是否可以更优雅地做到这一点(是的,我知道 seaborn 建立在上面matplotlib)。

感谢您的任何建议!

【问题讨论】:

标签: python matplotlib plot seaborn


【解决方案1】:

随便用

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)])

【讨论】:

  • 我希望可以提出一个小的后续问题......你知道如何添加标题(和副标题)吗?我在使用 sns.distplot? 的参数中看不到任何此类选项
  • plt.title(“标题”) 和 plt.suptitle(“副标题”)
  • 我不得不承认我很想删除这个问题,因为它被证明是一个不受欢迎的磁铁。但是您的建议确实使我摆脱了一个错误的假设,即我以某种方式绑定到 sns.distplot 的参数并且无法直接使用诸如 plt.title() 之类的方法。对我来说,这对于 seaborn 和 matplotlib 来说是一个真正的游戏规则改变者。再次感谢您的帮助!
  • 请注意,plt.axvline(x) 将在绘图的整个高度处以 x 的值绘制一个条形。您还可以设置线条颜色、线条样式等...见matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.axvline.html
  • 如何为 distplot 线和垂直线添加图例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2020-06-06
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多