Matplotlib散点图误差线两个数据集 [英] Matplotlib scatterplot error bars two data sets

查看:183
本文介绍了Matplotlib散点图误差线两个数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数据集,我想用误差线将图并排散布.下面是我用误差线绘制一组数据的代码.还有生成第二个数据集的代码.我希望每个值的每个数据的点和错误是相邻的.

我还想删除连接点的线.

 导入随机导入matplotlib.pyplot作为plt将numpy导入为np将scipy.stats导入为ss数据= []n = 100米 = 10对于我在xrange(m)中:d = []对于xrange(n)中的j:d.append(random.random())data.append(d)mean_data = []std_data = []对于我在xrange(m)中:均值 = np.mean(data[i])mean_data.append(平均值)std = np.std(data [i])std_data.append(std)df_data = [n] * mplt.errorbar(range(m), mean_data, yerr=ss.t.ppf(0.95, df_data)*std_data)plt.scatter(range(m),mean_data)plt.show()new_data = []对于我在xrange(m)中:d = []对于xrange(n)中的j:d.append(random.random())new_data.append(d)mean_new_data = []std_new_data = []对于我在xrange(m)中:均值 = np.mean(new_data[i])mean_new_data.append(平均值)std = np.std(new_data [i])std_new_data.append(std)df_new_data = [n] * m

解决方案

要删除散点图中的线,请使用

或使用

为每个点生成一个随机散点浮点数

x_scatter = np.random.uniform(-.5, .5, m)

产生类似的东西

要绘制两个数据集(使用第二种方法),可以使用:

  plt.errorbar(范围(m),mean_data,yerr = ss.t.ppf(0.95,df_data)* std_data,fmt ='o',label ="Data")# 在 x 中添加一些随机散点x_scatter = np.random.uniform(-.5, .5, m)plt.errorbar(np.arange(m) + x_scatter, mean_new_data,yerr = ss.t.ppf(0.95,df_new_data)* std_new_data,fmt ='o',label =新数据")plt.legend()plt.show()

I have two data sets, which I'd like to scatter plot next to each other with error bars. Below is my code to plot one data set with error bars. And also the code to generate the second data set. I'd like the points and errors for each data for each value to be adjacent.

I'd also like to remove the line connecting the dots.

import random
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as ss

data = []
n = 100
m = 10

for i in xrange(m):
    d = []
    for j in xrange(n):
        d.append(random.random())
    data.append(d)

mean_data = []
std_data = []

for i in xrange(m):
    mean = np.mean(data[i])
    mean_data.append(mean)
    std = np.std(data[i])
    std_data.append(std)



df_data = [n] * m
plt.errorbar(range(m), mean_data, yerr=ss.t.ppf(0.95, df_data)*std_data)
plt.scatter(range(m), mean_data)
plt.show()


new_data = []


for i in xrange(m):
    d = []
    for j in xrange(n):
        d.append(random.random())
    new_data.append(d)


mean_new_data = []
std_new_data = []

for i in xrange(m):
    mean = np.mean(new_data[i])
    mean_new_data.append(mean)
    std = np.std(new_data[i])
    std_new_data.append(std)



df_new_data = [n] * m

解决方案

To remove the line in the scatter plot use the fmt argument in plt.errorbar(). The plt.scatter() call is then no longer needed. To plot a second set of data, simply call plt.errorbar() a second time, with the new data.

If you don't want the datasets to overlap, you can add some small random scatter in x to the new dataset. You can do this in two ways, add a single scatter float with

random.uniform(-x_scatter, x_scatter)

which will move all the points as one:

or generate a random scatter float for each point with

x_scatter = np.random.uniform(-.5, .5, m)

which generates something like

To plot both datasets (using the second method), you can use:

plt.errorbar(
    range(m), mean_data, yerr=ss.t.ppf(0.95, df_data)*std_data, fmt='o',
    label="Data")
# Add some some random scatter in x
x_scatter = np.random.uniform(-.5, .5, m)
plt.errorbar(
    np.arange(m) + x_scatter, mean_new_data,
    yerr=ss.t.ppf(0.95, df_new_data)*std_new_data, fmt='o', label="New data")
plt.legend()
plt.show()

这篇关于Matplotlib散点图误差线两个数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆