首页 > 解决方案 > 如何制作条形图的分箱版本?

问题描述

我有一个列表列表

A = [[8.4476, 1.2896e-06], [8.1652, 2.4992e-09], [8.4757, 3.4313e-07], [8.5289, 2.8196e-09], [8.2903, 4.0126e-09], [8.2122, 1.2891e-08], [8.2598, 4.4194e-09], [8.2133, 1.3551e-09], [8.0199, 2.7166e-09], [8.5444, 4.5322e-09], [8.2125, 0.013257], [8.2465, 9.6889e-08], [8.3649, 2.2352e-08], [8.5861, 2.685e-08], [8.3939, 6.6243e-10], [8.1729, 1.2449e-08], [8.1729, 8.6429e-09], [8.0997, 3.1144e-09], [8.3379, 7.308e-08], [8.3071, 3.3383e-08], [8.5703, 5.1506e-10], [8.4036, 7.765e-09], [8.4314, 2.471e-08], [8.1761, 1.9816e-09], [8.5305, 1.7541e-09], [8.1103, 1.6479e-09], [8.1818, 4.3065e-05], [8.2028, 8.5556e-10], [8.4936, 5.0891e-09], [8.0726, 9.2431e-10], [8.5635, 2.9602e-07], [8.2327, 1.8363e-08], [8.1055, 5.482e-10], [8.2185, 1.7178e-05], [8.1212, 6.7481e-09], [8.092, 6.8427e-08], [8.0496, 2.6637e-09], [8.1818, 4.4151e-05], [8.1028, 1.5019e-09], [8.5635, 1.1081e-07], [8.4396, 7.4304e-06], [8.5011, 0.00048155], [8.1179, 3.244e-08], [8.0888, 2.0115e-09], [8.2783, 2.1645e-09], [8.0069, 3.2472e-09], [8.2028, 9.4631e-10], [8.1818, 4.3449e-05], [8.5635, 1.0127e-07], [8.0726, 1.0427e-09], [8.0542, 2.136e-09], [8.1179, 5.8536e-08], [8.3162, 6.0933e-09], [8.1004, 3.3053e-08], [8.4467, 1.0477e-08], [8.7168, 7.4619e-08], [8.8625, 8.2386e-08], [9.0955, 1.0668e-05], [8.9417, 1.1475e-07], [8.9012, 2.8507e-07], [8.6043, 4.9697e-07], [8.9169, 2.889e-06], [8.6292, 2.3711e-09], [8.8612, 9.6603e-08], [8.6301, 1.5749e-07], [8.8612, 5.4537e-08], [8.9189, 1.1827e-05], [8.6571, 4.5097e-10], [9.0022, 3.7623e-08], [8.8702, 4.1319e-08], [8.6571, 6.9032e-10], [9.0022, 1.2643e-08], [8.7583, 8.7156e-08], [8.6976, 0.021634], [9.2245, 6.5853e-09], [9.2596, 1.4178e-09], [9.7357, 4.5818e-07], [9.7357, 1.5467e-06], [9.2596, 1.0373e-09], [9.7357, 1.352e-06], [9.6335, 3.8465e-08], [9.4126, 3.5259e-08], [9.6335, 2.8004e-08], [9.4126, 7.7311e-08], [9.4126, 5.416e-08], [9.2529, 5.0376e-07], [9.6335, 3.388e-08], [9.4777, 3.0358e-07], [9.2448, 5.8716e-09], [9.3581, 1.3008e-08], [9.3581, 6.5036e-09], [9.7433, 1.1734e-07], [9.3581, 7.459e-09], [9.4874, 3.4768e-08], [9.6671, 4.8428e-08], [9.6671, 5.1251e-08], [9.4874, 3.5968e-08], [9.6671, 5.7862e-08], [9.4874, 4.2036e-08], [9.8819, 2.3973e-08], [9.8819, 2.8353e-08], [9.8819, 3.0334e-08], [10.0615, 9.0102e-06], [10.0615, 9.7216e-06], [10.0615, 6.8295e-06], [10.086, 0.00021523], [10.3562, 0.84578], [9.8411, 0.00087999], [10.3562, 0.8662], [10.086, 0.00044829], [9.8411, 0.00090252], [10.3562, 0.91307], [10.086, 0.00010695], [9.8411, 0.00088925], [12.0191, 0.0068726], [12.0191, 0.007106], [12.0191, 0.0070258], [11.7748, 0.039574], [11.7748, 0.042754], [11.7748, 0.036293], [11.9927, 0.045817], [11.9927, 0.0523], [11.9927, 0.049076], [11.9587, 0.064393], [11.9587, 0.068927], [11.9587, 0.061129], [11.8561, 0.033099], [11.8561, 0.028988], [11.8561, 0.034371]]

我想绘制一个条形图,其中我的 x 轴是这些列表的第一个元素,而我的 y 轴是这些列表的第二个元素。但是,我的 x 轴需要分成 7 个 bin,例如 [8, 8.6], [8.6, 9.2], [9.2, 9.8], [9.8, 10.4], [10.4, 11] 和 [11, 12.2] . 条的高度需要是落在每个 x bin 中的第二个元素的平均值,包括每个条的一个误差条,它代表落在每个 x bin 中的第二个元素的变化。

我能做的最好的是将所有数据点绘制为离散分布。我不能合并 7 个箱子来绘制更少数量的条形图。非常感谢您的帮助。在此处输入图像描述

标签: pythonmatplotlib

解决方案


如果您可以考虑其他套餐,我建议pandas

import pandas as pd

df = pd.DataFrame(A)

(df.iloc[:,1]
   .groupby(pd.cut(df.iloc[:,0],bins=[8,8.6,9.2,9.8,10.4, 11,12.2]))
   .mean()
   .plot.bar()
)

输出:

在此处输入图像描述


推荐阅读