基于多个数据框列的带有刻度的条形图

Bar chart with ticks based on multiple dataframe columns

如何从我的数据框中的 bins 在 matplotlib(或 pandas)中制作条形图?

我想要下面这样的东西,其中 x 轴标签来自数据框中的 lowhigh(所以第一个刻度将显示为 [-1.089, 0) 和 y值是我的数据框中的 percent 列。

这是一个示例数据集。数据集已经是这个格式了(我没有未删减版)

df = pd.DataFrame(
    {
        "low": [-1.089, 0, 0.3, 0.5, 0.6, 0.8],
        "high": [0, 0.3, 0.5, 0.6, 0.8, 10.089],
        "percent": [0.509, 0.11, 0.074, 0.038, 0.069, 0.202],
    }
)
display(df)

使用低、高列创建新列。

将 low 和 high 列中的 int 值转换为 str 类型,并将新的 str 设置为您想要的 [<low>, <high>) 表示法。

从那里,您可以使用 df.plot.bar()df 直接创建条形图,将新创建的列指定为 x,将百分比指定为 y。

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.bar.html

使用 IntervalArray.from_arrays 重新创建垃圾箱:

df['label'] = pd.arrays.IntervalArray.from_arrays(df.low, df.high)
#      low    high  percent          label
# 0 -1.089   0.000    0.509  (-1.089, 0.0]
# 1  0.000   0.300    0.110     (0.0, 0.3]
# 2  0.300   0.500    0.074     (0.3, 0.5]
# 3  0.500   0.600    0.038     (0.5, 0.6]
# 4  0.600   0.800    0.069     (0.6, 0.8]
# 5  0.800  10.089    0.202  (0.8, 10.089]

然后用 x 作为这些 bin 绘制:

df.plot.bar(x='label', y='percent')