如何设置垂直网格线matplotlib

时间:2019-05-17 09:22:42

标签: python matplotlib

我有一个时序图,显示每个月和一个值。

我添加了网格线plt.grid(True,which='major'),并且每个月都会显示一次。我的时间序列是10年,我只希望每年看到1个网格。

我的主要刻度线标签是:

ax.xaxis.get_majorticklocs()
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
        11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
        22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,
        33.,  34.,  35.,  36.,  37.,  38.,  39.,  40.,  41.,  42.,  43.,
        44.,  45.,  46.,  47.,  48.,  49.,  50.,  51.,  52.,  53.,  54.,
        55.,  56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.,  64.,  65.,
        66.,  67.,  68.,  69.,  70.,  71.,  72.,  73.,  74.,  75.,  76.,
        77.,  78.,  79.,  80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,
        88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,
        99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,
       110., 111., 112.])

我尝试通过以下方式更改主要刻度标签:

labels = ['']*len(ax.xaxis.get_majorticklocs())
idx=list(range(len(labels))[0::11])
for i in idx:
    labels[i]=ax.xaxis.get_majorticklocs()[i]
labels[len(labels)-1]=ax.xaxis.get_majorticklocs()[len(labels)-1]
from numpy import array 
labels=array(labels)
ax.set_xticks(labels)

标签为:

array(['0.0', '', '', '', '', '', '', '', '', '', '', '11.0', '', '', '',
       '', '', '', '', '', '', '', '22.0', '', '', '', '', '', '', '', '',
       '', '', '33.0', '', '', '', '', '', '', '', '', '', '', '44.0', '',
       '', '', '', '', '', '', '', '', '', '55.0', '', '', '', '', '', '',
       '', '', '', '', '66.0', '', '', '', '', '', '', '', '', '', '',
       '77.0', '', '', '', '', '', '', '', '', '', '', '88.0', '', '', '',
       '', '', '', '', '', '', '', '99.0', '', '', '', '', '', '', '', '',
       '', '', '110.0', '', '112.0'], dtype='<U32')

不幸的是,当我绘图时,所有的majorticklocs都保持不变,而且我仍然每个月都在网格线上看到。

我的情节已经完成:

fig, ax = plt.subplots(figsize=(20,20))
plt.plot(SoldHx['month'],SoldHx['Price'])
fig.suptitle('Median Price by Month')

labels = ['']*len(SoldHx.index)
idx=list(range(len(labels))[0::12])
for i in idx:
    labels[i]=SoldHx['month'][i]
labels[len(labels)-1]=SoldHx['month'][len(labels)-1]

plt.xticks(SoldHx.month,labels,rotation=90)
plt.grid(True,which='major')

plt.show()

enter image description here

1 个答案:

答案 0 :(得分:0)

您仅设置了主刻度线,缺少了小刻度线。我曾经有一个类似的问题,我只想要年度主线和季度副线,包括刻度标签。我的解决方案采用以下方式(从窗格中找到pd ...):

    years = list(range(2000, 2018))
    year_tick_pos = [pd.to_datetime(str(year) + "-01-01") for year in years]

    quarters = list()
    quarter_tick_pos = list()
    for year in years:
        for q in range(1, 5):
            new_quarter = pd.to_datetime(str(year) + "-" + str(q * 3 - 2).zfill(2) + "-01")
            if new_quarter <= limits[1]:
                quarter_tick_pos.append(new_quarter)
                quarters.append("Q" + str(q))

    ax.set_xlim(left=quarter_tick_pos[0] - pd.Timedelta('45 days'),
                right=quarter_tick_pos[-1] + pd.Timedelta('45 days'))

    ax.set_xticks(year_tick_pos)
    labels_major = ax.set_xticklabels(years)
    ax.set_xticks(quarter_tick_pos, minor=True)
    ax.set_xticklabels(quarters, minor=True, fontsize=8)

此代码段创建了不同样式的季度线和年度线,也许可以为您提供帮助。