【问题标题】:Average point and standard deviation bars on scatter plot散点图上的平均点和标准差条
【发布时间】:2019-04-30 00:09:16
【问题描述】:

如果我有这样的 MWE 散点图:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(5)
fig = plt.figure()
ax = fig.add_subplot(111)
xlist = []
ylist = []
for i in range(500):
    x = np.random.normal(100)
    xlist.append(x)
    y = np.random.normal(5)
    ylist.append(y)

x_ave = np.average(x)
y_ave = np.average(y)
plt.scatter(xlist, ylist)
plt.scatter(x_ave, y_ave, c = 'red', marker = '*', s = 50)

在情节上绘制“平均点”(有合适的​​词吗?)的最简单方法是什么?我发现的所有教程和示例都显示了如何绘制最佳拟合线,但我只想要单点。

绘图 (x_ave, y_ave) 有效,但有没有更好的方法,特别是因为我最终也想用误差线显示标准偏差?

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    如果您想绘制带有误差线的单个散点,最好的方法是使用errorbar 模块。以下答案显示了将其与误差线的自定义属性以及 x 和 y 的标准偏差为 1 的平均点一起使用的示例。您可以在xerryerr 中指定您的实际标准差值。可以使用this 解决方案从图例中删除误差线。

    plt.scatter(xlist, ylist)
    
    plt.errorbar(x_ave, y_ave, yerr=1, xerr=1, fmt='*', color='red', ecolor='black', ms=20, 
                 elinewidth=4, capsize=10, capthick=4, label='Average')
    
    handles, labels = ax.get_legend_handles_labels()
    handles = [h[0] for h in handles]
    ax.legend(handles, labels, loc='best', fontsize=16)
    

    【讨论】:

    • 谢谢。您的解决方案有效,但出现错误:handles = [h[0] for h in handles] TypeError: 'PathCollection' object does not support indexing 这是什么意思?
    • @Jim421616:没有最后三行你能找到吗?如果是,那么您可以将plt.legend() 放在plt.errorbar(...) 之后。在这种情况下,图例中也会出现错误栏。我现在要睡觉了,所以如果你需要没有错误栏的图例,明天再看看。否则,您可以尝试我在答案中为图例发布的链接上的解决方案以及有关堆栈溢出的类似其他答案
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多