【问题标题】:Matplotlib - Stacked bar-chart for time-series, with blank spaces for NaNsMatplotlib - 时间序列的堆叠条形图,NaN 有空格
【发布时间】:2019-01-03 12:52:43
【问题描述】:

我想创建以下图像,其中 x 轴包含每个 1 个月的块。如果用户每月值为 1,则该块应显示为绿色,如果为 NaN(或 0),则为红色(或最好为空白)。如何使用 matplotlib 或任何其他可以实现此目的的软件包来实现这一目标?

图片:

数据:

Date     chris.germany     carol.clair  ...  dana.davis
Jan-01         1               NaN                1
Feb-01         1               NaN               NaN
Mar-01         1                1                NaN
Apr-01         1                1                 1
May-01         1                1                NaN
...
Dec-02         1               NaN               NaN

【问题讨论】:

  • 您可以查看this question
  • 谢谢,这正是我想要的。如果您能提供一个提示,告诉我如何将该模板调整为我的数据格式,我将不胜感激。

标签: python matplotlib


【解决方案1】:

ImportanceofBeingErnest提供的解决方案:

This 链接通过 matplotlib 提供了一个基本的 broken_bahr 图。我不确定如何将其配置为与 df 一起使用,因此我手动输入了数据。

成品图:

最终代码:

import matplotlib.pyplot as plt

col = 'royalblue'

fig, ax = plt.subplots()
ax.broken_barh([(1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), 
            (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), 
            (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), 
            (22, 1), (23, 1), (24, 1)], (2.5, 1), facecolors=col)

ax.broken_barh([(4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), 
            (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), 
            (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), (22, 1), 
            (23, 1), (24, 1)], (4.5, 1), facecolors=col)

ax.broken_barh([(5, 1), (9, 1), (11, 1), (12, 1), (18, 1), (19, 1), (20, 1), (23, 1)], (6.5, 1), facecolors=col)

ax.broken_barh([(2, 1), (8, 1), (18, 1), (20, 1)], (8.5, 1), facecolors=col)

ax.broken_barh([(7, 1), (13, 1), (18, 1), (19, 1), (21, 1)], (10.5, 1), facecolors=col)

ax.set_ylim(1, 13)
ax.set_xlim(0, 24)
ax.set_yticks([3, 5, 7, 9, 11])
ax.set_yticklabels(['chris.germany\n(Trader)', 'carol.clair\n(Lawyer)', 'dana.davis\n(VP)', 'andrew.lewis\n(Director)', 'chris.mallory\n(Analyst)'])
ax.set_xticklabels(['Jan-01', 'Jul-01', 'Dec-01', 'Jun-02', 'Nov-02'])
ax.grid(True)

plt.show()

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 2019-05-30
    • 2012-05-11
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多