Matplotlib scatterplot error bars 两个数据集
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()
我有两个数据集,我想用误差条将它们并排散点图。下面是我的代码,用于绘制一个带有误差线的数据集。还有生成第二个数据集的代码。我希望每个值的每个数据的点和错误是相邻的。
我还想删除连接点的线。
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()