绘制彩色条形图
问题在于 pandas 条形图采用 color 参数来逐列应用。在这里,您只有一列。因此,像为条形图着色的规范尝试不会不工作
pd.DataFrame([12,14]).plot.bar(color=["red", "green"])
一种解决方法是创建一个对角矩阵而不是单列,并使用stacked=True 选项绘制它。
df = pd.DataFrame([12,14])
df = pd.DataFrame(np.diag(df[0].values), index=df.index, columns=df.index)
df.plot.bar(color=["red", "green"], stacked=True)
另一种选择是改用 matplotlib。
df = pd.DataFrame([12,14])
plt.bar(df.index, df[0].values, color=color)
根据值选择颜色
现在的问题仍然是如何创建在上述两种解决方案中使用的颜色列表。给定一个数据帧df,您可以创建一个与该帧长度相等的数组并用默认颜色填充它,然后您可以将两个最高值的条目设置为另一种颜色:
color = np.array(["gray"]*len(df))
color[np.argsort(df["Quantity"])[-2:]] = "red"
解决办法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = [['Apple',10],['Banana',15],['Kiwi',11],['Orange',17]]
df = pd.DataFrame(data,columns=['Fruit','Quantity'])
df.set_index('Fruit', inplace=True)
color = np.array(["gray"]*len(df))
color[np.argsort(df["Quantity"])[-2:]] = "red"
plt.bar(df.index, df.values, color=color)
plt.show()