【问题标题】:How to plot confidence interval in matplotlib?如何在 matplotlib 中绘制置信区间?
【发布时间】:2016-12-24 19:23:51
【问题描述】:

我正在使用 matplotlib 绘制数据集的分布,并希望覆盖置信区间的垂直线。

密度图看起来不错,但我看不到线。有什么想法吗?

# Get data
import urllib.request as request
request.urlretrieve('http://seanlahman.com/files/database/baseballdatabank-master_2016-03-02.zip', "baseballdatabank-master_2016-03-02.zip")
from zipfile import ZipFile
zip = ZipFile('baseballdatabank-master_2016-03-02.zip')
zip.extractall()

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

batting_df = pd.read_csv("baseballdatabank-master\core\Batting.csv")
batting_df = batting_df[batting_df['AB'] > 20]
batting_df['batting_average'] = batting_df['H'] / batting_df['AB']

# Plot distribution
batting_averages = batting_df['batting_average'].dropna()
batting_averages.plot.kde()

# Plot confidence interval
import scipy.stats
import numpy as np, scipy.stats as st
stderr = st.sem(batting_averages)
interval1 = (batting_averages.mean() - stderr * 1.96, batting_averages.mean() + stderr * 1.96)
plt.plot(interval1[0], 12)
plt.show()

我试图在第一个间隔的 x 坐标处绘制垂直线,该坐标以平均值为中心。我将 12 作为 y 坐标传递,因为这是 y 轴上显示的最大值。

【问题讨论】:

  • plot 的 y 参数是单一的。你需要你的 kde x 作为第一个参数,你的区间作为 y...
  • 您能expand your example 提供您拥有的那种数据吗?
  • 找到了答案,在那个情节中需要两个点作为参数。

标签: pandas matplotlib scipy


【解决方案1】:

如果你像这样抓住kde 的坐标轴:

ax = batting_averages.plot.kde()

...然后你可以在你想要的任何位置绘制垂直线:

stderr = st.sem(batting_averages)
ax.vlines( x=batting_averages.mean(), ymin=-1, ymax=15, color='red', label='mean' )
stderr = 0.1
ax.vlines( x=batting_averages.mean() - stderr * 1.96, ymin=-1, ymax=15, color='green', label='95% CI' )
ax.vlines( x=batting_averages.mean() + stderr * 1.96, ymin=-1, ymax=15, color='green' )
ax.set_ylim([-1,12])
ax.legend()
plt.show()

它为您提供以下图表:

(请注意,我更改了标准错误以使线条可见)

【讨论】:

  • 谢谢,这很有用。
【解决方案2】:

Plot 有两个参数,x 和 y。在这种情况下,我需要传递定义线的两个点的 x 坐标,然后传递两个点的 y 坐标:

plot((x1, x2), (y1, y2))

替换上例中的变量:

plt.plot((interval1[0], interval1[0]), (0, 12))
plt.plot((interval1[1], interval1[1]), (0, 12))

见:vertical & horizontal lines in matplotlib

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2020-05-01
    • 2013-02-05
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多