Grouped Bar graph Pandas

Shu*_*m R 11 python matplotlib python-2.7 python-3.x pandas

我有一张DataFrame名为pandas的桌子df:

+--- -----+------------+-------------+----------+------------+-----------+
|avg_views| avg_orders | max_views   |max_orders| min_views  |min_orders |
+---------+------------+-------------+----------+------------+-----------+
| 23       | 123       |   135       | 500      |    3       |    1      |
+---------+------------+-------------+----------+------------+-----------+ 
Run Code Online (Sandbox Code Playgroud)

我现在要寻找的是绘制一个分组条形图,在一个条形图中显示我(平均,最大,最小)的视图和订单.

也就是说,在x轴上会有视图和顺序相隔一段距离和3条(平均值,最大值,最小值)的视图和类似的订单.

我附上了一个示例条形图图像,只是想知道条形图应该如何看.

只是样品:绿色应为平均值,黄色为最大值和针脚 绿色应为平均值,黄色为最大值,粉红色为平均值.

我从matplotlib中的分组条形图之间设置了以下代码,但它对我不起作用:

plt.figure(figsize=(13, 7), dpi=300)

groups = [[23, 135, 3], [123, 500, 1]]
group_labels = ['views', 'orders']
num_items = len(group_labels)
ind = np.arange(num_items)
margin = 0.05
width = (1. - 2. * margin) / num_items

s = plt.subplot(1, 1, 1)
for num, vals in enumerate(groups):
    print 'plotting: ', vals
    # The position of the xdata must be calculated for each of the two data 
    # series.
    xdata = ind + margin + (num * width)
    # Removing the "align=center" feature will left align graphs, which is 
    # what this method of calculating positions assumes.
    gene_rects = plt.bar(xdata, vals, width)
s.set_xticks(ind + 0.5)
s.set_xticklabels(group_labels)
Run Code Online (Sandbox Code Playgroud)

绘图:[23,135,3] ... ValueError:形状不匹配:对象不能广播到单个形状

Ian*_*anS 20

使用熊猫:

import pandas as pd

groups = [[23,135,3], [123,500,1]]
group_labels = ['views', 'orders']

# Convert data to pandas DataFrame.
df = pd.DataFrame(groups, index=group_labels).T

# Plot.
pd.concat(
    [df.mean().rename('average'), df.min().rename('min'), 
     df.max().rename('max')],
    axis=1).plot.bar()
Run Code Online (Sandbox Code Playgroud)

结果图


Tho*_* G. 13

您不必为了以某种方式绘制它而修改您的数据框,对吗?

使用seaborn!

import seaborn as sns


sns.catplot(x = "x",       # x variable name
            y = "y",       # y variable name
            hue = "type",  # group variable name
            data = df,     # dataframe to plot
            kind = "bar")
Run Code Online (Sandbox Code Playgroud)

来源