簡體   English   中英

Matplotlib散點圖誤差線兩個數據集

[英]Matplotlib scatterplot error bars two data sets

我有兩個數據集,我想用誤差線將圖彼此並排散布。 下面是我的代碼,用於繪制一個帶有誤差線的數據集。 還有生成第二個數據集的代碼。 我希望每個值的每個數據的點和錯誤都相鄰。

我也想刪除連接點的線。

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

在此處輸入圖片說明

要刪除散點圖中的線,請使用plt.errorbar()中fmt參數。 這樣就不再需要plt.scatter()調用。 要繪制第二組數據,只需使用新數據再次調用plt.errorbar()

如果您不希望數據集重疊,則可以在x中向新數據集添加一些小的隨機散布。 您可以通過兩種方式執行此操作,使用

random.uniform(-x_scatter, x_scatter)

它將所有點移動為一個:

或為每個點生成一個隨機的散點浮動

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

會產生類似

在此處輸入圖片說明

要繪制兩個數據集(使用第二種方法),可以使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM