如何向 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 添加更多格式。 enter image description here