2017-05-08 41 views
0

我有两个数据集,我想用错误条将图分散在一起。下面是我的代码,用误差线绘制一个数据集。还有生成第二个数据集的代码。我希望每个数据的点和错误都是相邻的。Matplotlib scatterplot错误条两个数据集

我还想删除连接点的线。

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 

enter image description here

回答

1

要删除行散点图使用fmt论点plt.errorbar()。然后不再需要呼叫plt.scatter()。要绘制第二组数据,只需使用新数据再次调用plt.errorbar()即可。

如果您不希望数据集重叠,则可以将x中的一些小随机散点添加到新数据集中。您可以通过两种方式做到这一点,添加单分散浮球随

random.uniform(-x_scatter, x_scatter) 

,将所有的点移动作为一个:

或生成随机散布浮动与

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

产生类似

enter image description here

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

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() 
+0

感谢。不完全是。我希望这两点彼此相邻(相邻),以便点和误差线都不重叠。 – user58925

+0

查看编辑答案。 – Gabriel

+0

到底!谢谢 – user58925