Как получить лейблы мажорных и минорных тиков - PullRequest
0 голосов
/ 04 июля 2018

У меня есть вывод group-by, представляющий сумму дат в неделю.

Date
2008-10-28    20.0
2008-11-04    25.0
2008-11-11    20.0
2008-11-18    40.0
2008-11-25    35.0
2008-12-02    35.0
2008-12-09     NaN
2008-12-16     NaN
2008-12-23     NaN
2008-12-30     NaN
Freq: W-TUE, Name: Count, dtype: float64

Я пытаюсь построить их, используя plot_date

fig, ax = plt.subplots(figsize=(2, 4))
# ax = plt.gca()
line = ax.plot_date(a.index, a.values, '.', label='a', alpha=0.5, linewidth=1)
ax.tick_params('y', colors='k')
ax.set_xlabel('Date')
ax.set_ylabel('Frequency')
ax.set_title('Daily Games')
ax.tick_params('y', colors='k')
ax.grid(b=True, which='major', color='w', linewidth=1.0)
ax.grid(b=True, which='minor', color='w', linewidth=0.5)
ax.yaxis.grid(True)
ax.get_xaxis().set_minor_locator(mpl.ticker.AutoMinorLocator())
ax.set_xticklabels(ax.xaxis.get_majorticklabels(),
                    rotation=70)
ax.set_xticklabels(ax.xaxis.get_minorticklabels(),
                    rotation=70)
plt.xticks(rotation=70)
plt.show()

Это создает график примерно так:

enter image description here

Я перепробовал все способы перестановки, но я не могу получить как второстепенные, так и мажорные метки для даты для построения.

Я бы хотел, чтобы каждый месяц был помечен на 70 градусов. Как мне настроить то, что я должен сделать?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Из предложения @MartinEvans об использовании AutoDateLocator() Я посмотрел больше документации matplotlib и нашел matplotlib.dates.MonthLocator вместе с WeekdayLocator. Это позволило настроить основные и второстепенные символы для изменения формата и внешнего вида по мере необходимости.

Затем я использовал этот ответ , чтобы установить их вращение.

fig, ax = plt.subplots(figsize=(2, 4))
# ax = plt.gca()
line = ax.plot_date(a.Date, a.Frequency, '.', label='a', alpha=0.5, linewidth=1)
ax.tick_params('y', colors='k')
# ax.xticks(rotation=70)
ax.set_xlabel('Date')
# ax.xlabel('Date')
ax.set_ylabel('Frequency')
ax.set_title('Daily Games')
ax.tick_params('y', colors='k')
ax.grid(b=True, which='major', color='w', linewidth=1.0)
ax.grid(b=True, which='minor', color='w', linewidth=0.5)
ax.yaxis.grid(True)

xtick_locator = mpl.dates.MonthLocator(interval=1)
xtick_formatter = mpl.dates.AutoDateFormatter(xtick_locator)
ax.xaxis.set_major_locator(xtick_locator)
ax.xaxis.set_major_formatter(xtick_formatter)

xtick_locator = mpl.dates.WeekdayLocator(byweekday=3)
xtick_formatter = mpl.dates.AutoDateFormatter(xtick_locator)
ax.xaxis.set_minor_locator(xtick_locator)
ax.xaxis.set_minor_formatter(xtick_formatter)

plt.setp(ax.xaxis.get_minorticklabels(), rotation=90, size=10)
plt.setp(ax.xaxis.get_majorticklabels(), rotation=90, size=7)

fig.subplots_adjust(bottom=0.24)


plt.show()

enter image description here

0 голосов
/ 04 июля 2018

Вы можете использовать AutoDateLocator() следующим образом:

import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd

sns.set()

a = pd.DataFrame([
    ('2008-10-28', 20.0), ('2008-11-04', 25.0), ('2008-11-11', 20.0), 
    ('2008-11-18', 40.0), ('2008-11-25', 35.0), ('2008-12-02', 35.0)], columns=['Date', 'Frequency'])

a['Date'] = pd.to_datetime(a['Date'], format='%Y-%m-%d')

fig, ax = plt.subplots(figsize=(5, 5))
# ax = plt.gca()
line = ax.plot_date(a.Date, a.Frequency, '.', label='a', alpha=0.5, linewidth=1)
ax.tick_params('y', colors='k')
ax.set_xlabel('Date')
ax.set_ylabel('Frequency')
ax.set_title('Daily Games')
ax.tick_params('y', colors='k')
ax.grid(b=True, which='major', color='w', linewidth=1.0)
ax.grid(b=True, which='minor', color='w', linewidth=0.5)
ax.yaxis.grid(True)

xtick_locator = mpl.dates.AutoDateLocator()
xtick_formatter = mpl.dates.AutoDateFormatter(xtick_locator)

ax.xaxis.set_major_locator(xtick_locator)
ax.xaxis.set_major_formatter(xtick_formatter)

fig.subplots_adjust(bottom=0.24)
plt.xticks(rotation=70)
plt.show()

Это будет отображаться как:

plot with dates displayed

...