【问题标题】:Simplest histogram with dates as x-axis in matplotlibmatplotlib 中以日期为 x 轴的最简单直方图
【发布时间】:2018-12-21 15:00:40
【问题描述】:

我一直在尝试正确显示一个简单的直方图,其中日期为 x 轴,整数为 y 轴。下面的示例恰好是一个子图(2 个 y 轴,1 个共享 x 轴),但问题不存在,而是 hist 本身。

import datetime
import matplotlib
matplotlib.use('agg')   # server no need to display graphics
import matplotlib.pyplot as plt

# x-axis is 3 consecutive dates (days)
now = datetime.datetime.now().date()
x = [now, now + datetime.timedelta(days=1), now + datetime.timedelta(days=2)]

# y1-axis is 3 numbers
y1 = [10, 0, 3]
y2 = [8, 0, 3]

fig, axarr = plt.subplots(2, sharex=True)
bins = range(1, len(x) + 1)
axarr[1].hist(y1, bins=len(x), edgecolor="k")
axarr[1].set_xticks(bins)
axarr[1].set_xticklabels(x)
axarr[1].set_yticks(range(0, max(y1) + 1))

# axarr[0] ommitted for simplicity

plt.savefig('a.png', bbox_inches='tight')

但是我得到的图像是......

【问题讨论】:

标签: python matplotlib


【解决方案1】:

您可能需要bar 图表。

import datetime
import matplotlib
matplotlib.use('agg')   # server no need to display graphics
import matplotlib.pyplot as plt

# x-axis is 3 consecutive dates (days)
now = datetime.datetime.now().date()
x = [now, now + datetime.timedelta(days=1), now + datetime.timedelta(days=2)]

# y1-axis is 3 numbers
y1 = [10, 0, 3]
y2 = [8, 0, 3]

fig, axarr = plt.subplots(2, sharex=True)
bins = range(1, len(x) + 1)
axarr[1].bar(x, y1, edgecolor="k")
axarr[1].set_xticks(x)
axarr[1].set_xticklabels(x)

plt.savefig('a.png', bbox_inches='tight')

【讨论】:

    【解决方案2】:

    如果您希望在直方图的 x 轴上显示日期,则需要将日期作为 hist 的参数。

    now = datetime.datetime.now().date()
    x = [now, now + datetime.timedelta(days=1), now + datetime.timedelta(days=2)]
    
    axarr[1].hist(x, edgecolor="k")
    

    【讨论】:

    • 谢谢。没错,您没有为直方图定义 y 值...这就是为什么我需要 bar 图表的原因:S
    猜你喜欢
    • 2017-07-01
    • 2020-06-09
    • 1970-01-01
    • 2015-06-22
    • 2016-11-10
    • 2016-02-29
    • 2018-04-13
    • 2018-08-31
    • 2011-05-17
    相关资源
    最近更新 更多