2017-05-08 45 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