我已经用matplotlib编写了以下程序,以图形显示随时间变化的元素数量。
import pylab import numpy as np import datetime from matplotlib.dates import YearLocator, MonthLocator, DateFormatter date1 = datetime.date(1995, 1, 1) date2 = datetime.date(2004, 4, 12) years = YearLocator() # every year months = MonthLocator() # every month yearsFmt = DateFormatter('%Y') ax.xaxis.set_major_locator(years) ax.xaxis.set_major_formatter(yearsFmt) ax.xaxis.set_minor_locator(months) ax.autoscale_view() pylab.ylim(0, 250) plt.yticks(np.linspace(0,250,6,endpoint=True)) pylab.xlabel('YEAR') pylab.ylabel('No. of sunspots') pylab.title('SUNSPOT VS YEAR GRAPH') a=[[50,50],[100,100],[250, 250],[200,200],[150,150]] plt.plot(*zip(*a), marker='o', color='r', ls='')
输出如下
但是,我希望它在x轴上显示年份而不是数字。
您正在绘制年份,但是年份分别a
是50、100、250、200 和150。这些是内的列表中的第一个元素,这些元素作为x
值传递到pyplot.plot 。
您可能想在某个位置定义日期,尽管您可能还希望将其设置xticks
为与要绘制的日期相同,因为我可以告诉您关心的图表看起来很整洁。
import pylab import numpy as np import datetime from matplotlib.dates import YearLocator, MonthLocator, DateFormatter
另外,别忘了导入 pyplot
import matplotlib.pyplot as plt
这是一些示例日期。您可以将它们更改为太阳黑子测量的确切日期。
a=[[datetime.date(1995, 1, 1), 50], [datetime.date(2000, 1, 1), 100], [datetime.date(2005, 1, 1), 250], [datetime.date(2010, 1, 1), 200], [datetime.date(2015, 1, 1), 150] ] years = YearLocator() # every year months = MonthLocator() # every month yearsFmt = DateFormatter('%Y')
gca
在修改轴之前先调用以获取当前轴。
ax = plt.gca() ax.xaxis.set_major_locator(years) ax.xaxis.set_major_formatter(yearsFmt) ax.xaxis.set_minor_locator(months) ax.autoscale_view() pylab.ylim(0, 250) plt.yticks(np.linspace(0,250,6,endpoint=True))
从a
数组中选择日期以将其用作xtick标签。
dates = [date for date,sunspot in a] plt.xticks(dates) pylab.xlabel('YEAR') pylab.ylabel('No. of sunspots') pylab.title('SUNSPOT VS YEAR GRAPH') plt.plot(*zip(*a), marker='o', color='r', ls='') plt.show()