如何向 pandas.plot(kind='bar) 添加回归线?

How Can I Add A Regression Line to pandas.plot(kind='bar)?

我想为下面的每种口味添加一条回归线。我怎样才能做到这一点?我需要使用子图吗?可以使用 pandas.plot 还是我需要使用完整的 matplotlib?

import pandas as pd

# initialize list of lists
data = [[1,157.842730083188,202.290991182781,244.849416438322],
        [2,234.516775578511,190.104435611797,202.157088214941],
        [3,198.279130213755,193.075780258345,194.112394276613],
        [4,156.285653517235,198.382900113055,185.380696178104],
        [5,190.653607667334,208.807038546447,202.662790911701],
        [6,192.027054343382,168.768097007287,179.315293388299],
        [7,144.927513854729,166.183469310198,157.338388768229],
        [8,194.096584739985,177.710332802887,188.006211652239],
        [9,131.613923150861,112.503607632448,128.947939049068],
        [10,139.545538050778,129.935716833166,139.334073132085]
]
 
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['DensityDecileRank', 'Flavor1', 'Flavor2', 'Flavor3'])

df.plot(x='DensityDecileRank',
        kind='bar',
        stacked=False)

如果您不介意使用 numpy 显式计算回归值, 以下基于 this 的代码片段可用作快速解决方案:

ax = df.plot(x='DensityDecileRank', kind='bar', stacked=False)

rank, flavors = df.columns[0], df.columns[1:]
for flavor in flavors:
    reg_func = np.poly1d(np.polyfit(df[rank], df[flavor], 1))
    ax.plot(reg_func(df[rank]))
plt.show()

上面的代码为每种口味导出函数reg_func,可用于根据排名值计算回归值。 回归线按照风味列的顺序绘制以匹配颜色。可以将进一步的格式添加到 ax.plot