在 Python 中使用误差线绘图

Plotting with errorbars in Python

我有一个列表,形式是[[(x1, y1), (x2, y2), (x3, y3)], [...], [...]]

[[(10.0, -1.0), (7.0, 0.05889647076017157), (13.0, 0.47096776983628086)], [(10.5, -1.0), (13.0, 0.07080679131269396), (7.5, 0.16547229577841294)], [(11.0, -1.0), (8.0, 0.27471205881135075), (13.5, 0.682988382311833)]]

我想从列表中提取元组中的第一个索引。

例如,上面的列表将是 -> [[(10.0), (7.0), (13.0)], [(10.5), (13.0), (7.5)], [(11.0), (8.0), (13.5)]](形式:[[(x1), (x2), (x3)], [(x4), (x5), (x6 )], [(x7), (x8), (x9)]]

然后变成带有误差线的图。 (元组中的第一个值将是主要值,其他两个值将是错误)

这就是我想要得到的:

我该怎么做?我在网上找不到任何类似的例子。

您可以通过以下方式获取列表:

vals = [[i[0] for i in tup] for tup in lst ]
vals

[[10.0, 7.0, 13.0], [10.5, 13.0, 7.5], [11.0, 8.0, 13.5]]

绘制时,将其放在 np 矩阵中并进行排序会更容易,因为误差条函数需要长度作为输入而不是坐标:

import numpy as np
import matplotlib.pyplot as plt

vals = np.sort(np.array(vals))
vals[:,[0,2]] = vals[:,[0,2]] - vals[:,1].reshape(-1,1)
vals

array([[-3. , 10. ,  3. ],
       [-3. , 10.5,  2.5],
       [-3. , 11. ,  2.5]])

fig, ax = plt.subplots(1, 1)
ax.errorbar(vals[:,1], vals[:,1], yerr=[-vals[:,0],vals[:,2]], fmt='o')
plt.show()

你可以试试

import matplotlib.pyplot as plt

x = [[(10.0, -1.0), (7.0, 0.05889647076017157), (13.0, 0.47096776983628086)], [(10.5, -1.0), (13.0, 0.07080679131269396), (7.5, 0.16547229577841294)], [(11.0, -1.0), (8.0, 0.27471205881135075), (13.5, 0.682988382311833)]]

plt.boxplot([[j[0] for j in i] for i in x])