【问题标题】:python matplotlib setting years in x axispython matplotlib在x轴上设置年份
【发布时间】:2016-03-19 03:27:44
【问题描述】:

我使用 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 轴上显示年份而不是数字。

【问题讨论】:

  • 要使日期定位器/格式化程序正常工作,您需要针对 datetime 对象进行绘图。

标签: python numpy matplotlib graph


【解决方案1】:

正在绘制年份,但年份是 50、100、250、200 和 150。这些是 a 内部列表中的第一个元素,它被传递给 pyplot。绘制为x 值。

您想在某个地方定义日期,但您可能还想将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()

【讨论】:

  • 如何使用 OOP 接口而不是 pylab 来完成?
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2021-09-14
  • 2019-07-03
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多