如何绘制matplotlib中不同组的直方图

我有一张桌子,如:

value    type
10       0
12       1
13       1
14       2

生成一个虚拟数据:

import numpy as np

value = np.random.randint(1, 20, 10)
type = np.random.choice([0, 1, 2], 10)

我想用matplotlib(v1.4)在Python 3中完成一项任务:

  • 绘制value的直方图
  • type分组,即使用不同的颜色来区分类型
  • “酒吧”的位置应该是“闪避”,即并排
  • 由于价值的范围很小,因此我会使用箱子的identity ,即箱子的宽度为1
  • 问题是:

  • 如何根据type的值为条形分配颜色并在色彩映射中绘制颜色(例如, Accent或matplotlib中的其他cmap)? 我不想使用命名的颜色(即'b', 'k', 'r'
  • 我的直方图中的酒吧彼此重叠,如何“闪避”酒吧?

  • 请注意 (以免邮寄投票并被视为“天真”)

  • 我在Seaborn,matplotlib和pandas.plot了两个小时,但没有得到所需的直方图。
  • 我阅读了matplotlib的示例和用户指南。 令人惊讶的是,我没有找到关于如何从色彩地图分配颜色的教程。
  • 我在Google上搜索过,但没有找到一个简洁的例子。
  • 我想可以用matplotlib.pyplot完成任务,不需要导入一堆模块,比如matplotlib.cmmatplotlib.colors

  • 对于第一个问题,我们可以创建一个等于1的虚拟列,然后通过对该列进行求和来生成计数,并按值和类型进行分组。

    对于第二个问题,您可以使用colormap参数直接将colormap传递给plot

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    import seaborn
    seaborn.set() #make the plots look pretty
    
    df = pd.DataFrame({'value': value, 'type': type})
    df['dummy'] = 1
    ag = df.groupby(['value','type']).sum().unstack()
    ag.columns = ag.columns.droplevel()
    
    ag.plot(kind = 'bar', colormap = cm.Accent, width = 1)
    plt.show()
    

    在这里输入图像描述

    链接地址: http://www.djcxy.com/p/67601.html

    上一篇: How to plot a histogram by different groups in matplotlib

    下一篇: Matplotlib Pyplot logo/image in Plot