我不知道你有什么样的数据,但这里有一个模拟的例子,演示如何在x轴上绘制月\日的柱状图。在
我只能假设您从datetime对象的列表开始,但是我无法确定nc是什么(是吗matplotlib.日期模块?)或者说在这个独特的时代里到底能找到什么样的时代。所以一般来说这就是方法。在
这些模块你将需要和使用。在import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
这是我用过的模拟日期。对于这个例子。只有11个月的时间,所以大多数情况下所有的垃圾箱最终都是1个。在
^{pr2}$
如果像上面的例子一样,你要面对不同的年份,你必须自己“叠加”它们。否则,我将在后面使用的date2num函数将产生完全不同的数字。“堆叠”它们意味着将它们转换为好像它们都发生在同一年。在stacked_dates = []
for date in dates:
stacked_dates.append( date.replace(year=2000) )
>>> stacked_dates
[datetime.datetime(2000, 1, 1, 1, 1, 1), datetime.datetime(2000, 2, 2, 2, 2, 2), datetime.datetime(2000, 3, 3, 3, 3, 3), datetime.datetime(2000, 4, 4, 4, 4, 4), datetime.datetime(2000, 5, 5, 5, 5, 5), datetime.datetime(2000, 6, 6, 6, 6, 6), datetime.datetime(2000, 7, 7, 7, 7, 7), datetime.datetime(2000, 8, 8, 8, 8, 8), datetime.datetime(2000, 9, 9, 9, 9, 9), datetime.datetime(2000, 10, 10, 10, 10, 10), datetime.datetime(2000, 11, 11, 11, 11, 11)]
好吧。现在我们可以使用date2num函数来获得mpl真正理解的内容。(顺便说一句,如果您只想绘制这些数据,可以使用plt.plot_dates函数,该函数可以理解日期时间对象)stacked_dates = mpl.dates.date2num(stacked_dates)
>>> stacked_dates
array([ 730120.04237269, 730152.08474537, 730182.12711806,
730214.16949074, 730245.21186343, 730277.25423611,
730308.2966088 , 730340.33898148, 730372.38135417,
730403.42372685, 730435.46609954])
好了,现在开始绘制。mpl可以理解这些数字,但它不会自动假设它们是日期。它将把它们当作正常的数字来处理。这就是为什么我们要告诉x轴它们实际上是日期。用major_axis_formatter和set_major_locator来完成fig = plt.figure()
ax = plt.subplot(111)
ax.xaxis.set_major_locator(mpl.dates.MonthLocator())
format = mpl.dates.DateFormatter('%m/%d') #explore other options of display
ax.xaxis.set_major_formatter(format)
ax.hist(stacked_dates) #plot the damned thing
plt.xticks(rotation='vertical') #avoid overlapping numbers
#make sure you do this AFTER .hist function
plt.show()
此代码生成以下图形:
请注意,您可能无法在原始图表上看到日期,因为它们会在屏幕上消失(像这样的格式可能很长,并且无法显示在图表中)。在这种情况下,按“配置子批次”按钮并调整“底部”的值。在脚本中,您可以通过plt.subplots_adjust(bottom=.3)或其他值来完成此操作。在
您还应该注意指定ax.hist(stacked_dates, bins=12)中有12个箱子,因为默认值是10,看起来很像我的图形。在
还有一个更简单,虽然不太可修改/可个性化等。。。使用条形图而不是柱状图的可能性。阅读一下它HERE,但它实际上取决于你所掌握的信息类型。如果日期很多,那么让hist函数计算bin高度可能比自己计算要容易得多。
如果是其他信息,那么考虑使用条形图是值得的。在
完整的脚本应该是:import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
stacked_dates = []
for date in dates:
stacked_dates.append( date.replace(year=2000) )
stacked_dates = mpl.dates.date2num(stacked_dates)
fig = plt.figure()
ax = plt.subplot(111)
ax.xaxis.set_major_locator(mpl.dates.MonthLocator())
format = mpl.dates.DateFormatter('%m/%d')
ax.xaxis.set_major_formatter(format)
ax.hist(stacked_dates)
plt.xticks(rotation='vertical')
plt.show()