Как построить нестандартный формат даты в Python - PullRequest
0 голосов
/ 16 октября 2018

У меня есть столбец с пользовательским форматом даты: YYYYWeekNo например, 201801, 201802 ... 201851, 201852

Проблема возникает, когда у меня есть данные, которые переходят с 201752 на 201801, что создает график дляобрабатывать данные как непрерывные по шкале 100, следовательно, график искажается

Есть ли способ разрешить этот график с помощью непостоянной метки x?

x = []
year = 2017
for i in range(104):
    j = i+1
    if j <= 52:
        x.append(year * 100 + j)
    else:
        k = j - 52
        x.append(((year+1) * 100 ) + k)


np.random.seed(1)
values = np.random.randint(low=0, high=5000, size=104)


df = pd.DataFrame.from_dict({'year_week': x, 'values': values})
df.set_index('year_week').plot(figsize=(15, 5))

enter image description here

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете 'разбить' ось, используя пример matplotlib .Это будет адаптированная версия:

import matplotlib.pylab as plt
import numpy as np

x = []
year = 2017
for i in range(104):
    j = i+1
    if j <= 52:
        x.append(year * 100 + j)
    else:
        k = j - 52
        x.append(((year+1) * 100 ) + k)
np.random.seed(1)
values = np.random.randint(low=0, high=5000, size=104)

df = pd.DataFrame.from_dict({'year_week': x, 'values': values})

f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor='w', figsize=(10,10))

# plot the same data on both axes
ax.plot(df['year_week'], df['values'])
ax2.plot(df['year_week'], df['values'])

ax.set_xlim(201700,201753)
ax2.set_xlim(201800,201853)

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params()
ax2.yaxis.tick_right()

#this gets rid of scientific notation, so it's more readable
ax.ticklabel_format(useOffset=False)
ax2.ticklabel_format(useOffset=False)
plt.show()

Вывод:

enter image description here

Более того, похоже, есть пакет, посвященныйэта конкретная проблема:

Brokenaxes

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