Как установить вертикальные линии сетки Matplotlib - PullRequest
0 голосов
/ 17 мая 2019

У меня есть график временных рядов, показывающий каждый месяц и значение.

Я добавил линии сетки plt.grid(True,which='major'), и он отображается для каждого месяца.Мой временной ряд составляет 10 лет, и я хочу видеть только одну сетку каждый год.

Мои основные метки тиков:

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 остаются неизменными, и я все еще вижу каждый месяц на линии сетки.

myУчасток сделан:

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 голосов
/ 17 мая 2019

Вы установили только основные галочки, минорные галочки отсутствуют.Когда-то у меня была похожая проблема, я хотел, чтобы ежегодные основные линии и квартальные второстепенные линии, включая метки для галочек.Мое решение выглядело примерно следующим образом (pd from pands ...):

    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)

Этот фрагмент создавал квартальные и годичные линии в другом стиле, возможно, это может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...