【问题标题】:How to show time (years) on x axis in Python如何在 Python 中的 x 轴上显示时间(年)
【发布时间】:2018-09-02 12:18:57
【问题描述】:

我有一个 NetCDF 数据,其一维随时间变化 1000 年(从 850 年到 1849 年的 1 年间隔)。我正在绘制一个时间序列,我只想在 X 轴上显示年份(850 到 1849)。我使用了以下脚本,但它不起作用。

import netCDF4 as netcdf
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime

nc = netcdf.Dataset('tas_850-1849.nc')
time = nc.variables['time']
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
var = nc.variables['pdo'][:]

start = datetime.date(850,01,01)
dates = [start + datetime.timedelta(n) for n in range(len(var))]

plt.plot(dates, var[:,0,0], color='red', linewidth=2, label='Data1')

plt.show()

我得到以下图像,这不是我想要的方式。

以时间为 X 轴的时间序列线图。

【问题讨论】:

  • 您的代码中有一个问题:dates 在每天的时间步长上都在增加。你可以使用dates = [datetime.date(850+n,1,1) for n in range(len(var))]之类的东西。
  • 现在它正在使用您建议的脚本。但是,如何处理这里的刻度线。刻度线显示从 801 到 1801,有 200 个间隔,值从 850 到 1850 正确定位。绘图是正确的,但我需要 X 轴刻度从 850 到 1850 而不是 801-1801。

标签: python netcdf


【解决方案1】:

正如@Robert Davy 在他的评论中提到的那样,日期生成得不好。一旦这个问题得到解决,它就可以使用你的 sn-p 对我有用。

如果您需要有关刻度定位和格式化的更多信息,请查看this

已编辑

根据this,我试试:

import matplotlib.dates as mdates

plt.plot(dates, var[:,0,0], color='red', linewidth=2, label='Data1')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())

【讨论】:

  • 不幸的是它没有用。按照上面的脚本,它绘制了相同的图,没有任何 X 轴值。
  • 我无权访问该数据,但此解决方案使用人工时间序列对我有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2016-01-03
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多