Pandas DataFrame Bar Plot - Plot Bars Different Colors From Specific Colormap

匿名 (未验证) 提交于 2019-12-03 09:06:55

问题:

How do you plot the bars of a bar plot different colors only using the pandas dataframe plot method?

If I have this DataFrame:

df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()     index  count 0      0   3372 1      1  68855 2      2  17948 3      3    708 4      4   9117 

What df.plot() arguments do I need to set so each bar in the plot:

  1. Uses the 'Paired' colormap
  2. Plots each bar a different color

What I am attempting:

df.plot(x='index', y='count', kind='bar', label='index', colormap='Paired', use_index=False) 

The result:

What I already know (yes, this works, but again, my purpose is to figure out how to do this with df.plot ONLY. Surely it must be possible?):

def f(df):   groups = df.groupby('index')    for name,group in groups:     plt.bar(name, group['count'], label=name, align='center')    plt.legend()   plt.show() 

回答1:

There is no argument you can pass to df.plot that colorizes the bars differently for a single column.
Since bars for different columns are colorized differently, an option is to transpose the dataframe before plotting,

ax = df.T.plot(kind='bar', label='index', colormap='Paired') 

This would now draw the data as part of a subgroup. Therefore some tweaking needs to be applied to set the limits and xlabels correctly.

import matplotlib.pyplot as plt import pandas as pd  df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()  ax = df.T.plot(kind='bar', label='index', colormap='Paired') ax.set_xlim(0.5, 1.5) ax.set_xticks([0.8,0.9,1,1.1,1.2]) ax.set_xticklabels(range(len(df))) plt.show() 

While I guess this solution matches the criteria from the question, there is actually nothing wrong with using plt.bar. A single call to plt.bar is sufficient

plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df)))) 

Complete code:

import matplotlib.pyplot as plt import pandas as pd import numpy as np  df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()  plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))  plt.show() 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!