在 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])
我有一个列表,形式是[[(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])