如何用绘制的时间序列拟合xticks

时间:2018-10-30 17:11:28

标签: python matplotlib

我有几个时间数据图:

enter image description here

例如,这次意甲开始2003.01并完成2007.01。我不知道为什么matplotlib决定将xticks放在不方便阅读时间序列的某个随机位置。我希望在时间系列开始时有一个xtick,然后在每年开始时再有一个xtick。

我无法使用“ xlim”技巧,因为我有大约1000个不同的地块。

这是我当前正在使用的代码

matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]
plt.style.use('fivethirtyeight')

def to_inch(cm):
    return cm/2.54 

rc('figure', **{
   "facecolor": "white",
   "figsize": (to_inch(11.7), to_inch(8.27),)
})

rc('text', usetex=False)
font = {
    'family': 'serif', 
    'serif': ['Computer Modern'],
    'size': 8
}
rc('font', **font)

labelsize = 6
linewidth = 0.5
axes = {
    'labelsize': labelsize,
    "edgecolor": '#cbcbcb', 
    "linewidth": linewidth,
    "facecolor": "white"
}
rc("grid", **{"linewidth": linewidth}) 
rc('axes', **axes)

rc('legend', **{'fontsize': 5})

rc('xtick', **{"labelsize": labelsize})
rc('ytick', **{"labelsize": labelsize})

nc = Dataset("o_gg.nc", 'r+')
#Get time
time = num2date(nc.variables['time'[:],getattr(nc.variables['time'],'units'))
time_ctr_ch = np.array([ xx-dt.timedelta(hours=12,minutes=15) for xx in time])
ctr_chtessel_soil = nc.variables['SoilMoist'][:,:,0,0]
plt.plot(time_ctr_ch, ctr_chtessel_soil, c='lightsteelblue', linewidth=0.5

2 个答案:

答案 0 :(得分:2)

您可以使用matplotlib.dates格式化程序和定位符。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, DateFormatter

y = np.random.rand(72)
x = pd.date_range('2011-03-01', periods= 72, freq= 'd')

fig, ax = plt.subplots()
ax.plot(x,y)

ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m-%d"))

plt.show()

enter image description here

答案 1 :(得分:0)

类似的东西可以满足您的要求。更改为适合您代码的年份

import matplotlib.pyplot as plt
%matplotlib inline
y = np.random.rand(72)
x = pd.date_range('2011-03-01', periods= 72, freq= 'd')


def get_strings(x):
    lst_strngs = []
    lst_strngs.append(str(x[0].date()))
    for i in range(1,72):
        if x[i].day==1:
            lst_strngs.append(str(x[i].date()))
        else:
            lst_strngs.append("")
    return lst_strngs
ax= plt.subplot()
plt.plot(x,y)

_=plt.xticks(x,get_strings(x))

那将得到:enter image description here