Как изменить xticklables из сюжета панд с осью timedelta? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь построить этот фрейм данных:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({'d': [np.timedelta64(5,'h'), np.timedelta64(7,'h')],
                 'v': [100,200]})

ax = df.set_index('d').plot.bar()

Что выглядит так: enter image description here

Здесь я хотел бы удалить «дни 0» из xticklabels.

Вот моя попытка:

ax = df.set_index('d').plot.bar()
locs, labels = plt.xticks()

for l in labels:
    print(l)

# gives
Text(0, 0, '0 days 05:00:00')
Text(0, 0, '0 days 07:00:00')

Кроме того,

xlabels = [l for l in ax.get_xticklabels()]
# [Text(0, 0, '0 days 05:00:00'), Text(1, 0, '0 days 07:00:00')]

Но когда я пытаюсь измениться: xlabels[0][2] = str(xlabels[0][2]).lstrip('days 0 ')

Я получаю следующую ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-2e745c3160f9> in <module>()
----> 1 lst[0][2]

TypeError: 'Text' object does not support indexing

Как исправить ошибку? или в целом, как изменить xticklables на этом графике?

1 Ответ

0 голосов
/ 01 мая 2019

Это должно работать:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import text as TEXT


df = pd.DataFrame({'d': [np.timedelta64(5,'h'), np.timedelta64(7,'h')],
                 'v': [100,200]})


ax = df.set_index('d').plot.bar()
xlabels = [l for l in ax.get_xticklabels()]

newlabels = []
for xlabel in xlabels:
    x,y = xlabel.get_position();
    lbl = xlabel.get_text().lstrip('0 days ');
    text = TEXT(x, y, lbl,visible=False);
    newlabels.append(text)

ax.set_xticklabels(newlabels)

выход

enter image description here

...