我使用的是 python 2,下面的代码只是使用了一些示例数据,我的实际数据可能有不同的长度,可能不是很详细。
import numpy as np
import datetime
import matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x_values = [datetime.datetime(2018, 11, 8, 11, 16),
datetime.datetime(2018, 11, 8, 11, 17),
datetime.datetime(2018, 11, 8, 11, 18),
datetime.datetime(2018, 11, 8, 11, 19),
datetime.datetime(2018, 11, 8, 11, 20),
datetime.datetime(2018, 11, 8, 11, 21),
datetime.datetime(2018, 11, 8, 11, 22),
datetime.datetime(2018, 11, 8, 11, 23),
datetime.datetime(2018, 11, 8, 11, 24),
datetime.datetime(2018, 11, 8, 11, 25),
datetime.datetime(2018, 11, 8, 11, 26),
datetime.datetime(2018, 11, 8, 11, 27),
datetime.datetime(2018, 11, 8, 11, 28),
datetime.datetime(2018, 11, 8, 11, 29),
datetime.datetime(2018, 11, 8, 11, 30),
datetime.datetime(2018, 11, 8, 11, 31)]
y_values = [1392.1017964071857,
1392.2814371257484,
1392.37125748503,
1227.6802721088436,
1083.1,
1317.0461538461539,
1393.059880239521,
1393.4011976047905,
1393.491017964072,
1393.8502994011976,
1318.3461538461538,
1229.4965986394557,
1394.2095808383233,
1394.3892215568862,
1394.6586826347304,
1394.688622754491]
rects1 = ax.bar(x_values, y_values)
fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我应该如何自动设置条形的宽度?照原样,我得到以下信息:
![没有设置宽度[1]](https://i.stack.imgur.com/W6iB1.png)
如果我将宽度设置为 0.0006,那么示例数据看起来不错:
![宽度手动设置为 0.0006[2]](https://i.stack.imgur.com/WwnDv.png)
我从中计算出 matplotlib 以天为单位测量 x 轴(因为 0.0007 天几乎正好是 1 分钟,这与我的时间间隔相匹配,而 0.0006 给出了条形之间的间隙)但是如果我得到每小时值或几秒钟,或几周,等等。当然有一个选项可以自动处理这个问题吗?
如果您希望条形宽度不大于任何连续日期时间之间的差异,您可以计算该数字并将其提供给条形width参数。
import matplotlib.dates as mdates
width = np.min(np.diff(mdates.date2num(x_values)))
ax.bar(x_values, y_values, width=width, ec="k")
Run Code Online (Sandbox Code Playgroud)