如何使用matplotlib创建自定义python图表

2024-05-23 02:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Matplotlib(打开以使用任何其他库)制作高度定制的图表。你知道吗

我得到的数据是这样的

ItemID | ItemPhase | ItemStatus | ItemOutcome |  Date      
  1        Phase1     Complete       In         01-02-2011
  2        Phase2       WIP          WIP        01-03-2014
  3        Phase1     Complete       Out        05-02-2010
  4        Phase3       WIP          WIP        01-04-2015
  5        Phase2     Complete       In         01-05-2012
  6        Phase2       WIP          WIP        01-02-2013
  7        Phase3     Complete       In         01-06-2015
  8        Phase2     Complete       Out        01-07-2013

图表的思想是显示每个阶段已完成的项目的进度。每完成一个项目,就确定一个结果,如果项目还没有完成,就没有结果。你知道吗

日期仅用于获取项目阶段,根据日期确定阶段。你知道吗

我希望图表如下所示: enter image description here

从图中可以看到,“项目结果”部分是根据“项目状态”部分的结果构建的。你知道吗

我一直努力开始或得到一个如何建立这个想法,所以任何帮助是非常感谢。你知道吗

谢谢你的支持!你知道吗


Tags: 数据项目in高度matplotlib图表out阶段
1条回答
网友
1楼 · 发布于 2024-05-23 02:33:55

这里有一些指针让你开始。你知道吗

假设您的数据帧是df,您想为Phase2绘制ItemStatus单元格:

df = df[df['ItemPhase'] == 'Phase2']
total = df['ItemStatus'].count()

第一件事你可以绘制的是项目计数虚线栏。如果每个状态单元格1.0高(在完成在制品百分比之间划分),我们可以为标签多分配大约40%(height=1.4)。你知道吗

ax.bar(0, 1.4, width=1, edgecolor='black', lw=1, ls='dotted', color="white")

现在让我们绘制主要部分,您需要从0ItemStatus == WIP频率的第一个条,以及从这个频率开始并上升到1的第二个条。您可以用value_counts得到每个状态计数,然后除以total得到百分比。你知道吗

bottom = 0
for i, s in enumerate(df['ItemStatus'].value_counts().iteritems()):
    label, count = s
    freq = count / float(total)

    r, = ax.bar(0, freq, width=1, bottom=bottom, color=bg[i], edgecolor='black', lw=3)

    ax.text(r.get_x() + r.get_width()/2.,
            r.get_y() + r.get_height()/2.,
            '{}% ({}) Items {}'.format(int(freq * 100), count, label),
            ha="center", va="center", color=fg[i])

    bottom += freq

现在您只需要n Items标签。可以使用最新的条形图r坐标将其正确居中。你知道吗

ax.text(r.get_x() + r.get_width()/2., 1.2,
        '{} Items'.format(total),
        ha="center", va='center', color='black')

这是你得到的

enter image description here

现在您需要:

  • 找到一些好的pandas方法来遍历所有单元格
  • 使用x轴的日期信息
  • 添加额外的标签,如Phase xItem Status

相关问题 更多 >

    热门问题