python matplotlib在x轴上设置年份

com*_*crk 2 python numpy graph matplotlib

我已经用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='')
Run Code Online (Sandbox Code Playgroud)

输出如下

在此处输入图片说明

但是,我希望它在x轴上显示年份而不是数字。

pne*_*ics 5

正在绘制年份,但是年份分别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
Run Code Online (Sandbox Code Playgroud)

另外,别忘了导入 pyplot

import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

这是一些示例日期。您可以将它们更改为太阳黑子测量的确切日期。

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')
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

pyplot输出