我有几个时间数据图:
例如,这次意甲开始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
答案 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()
答案 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))