Формат даты изменен с помощью точечной диаграммы морского судоходства - PullRequest
4 голосов
/ 20 июня 2020

Когда я использую seaborn для построения точечной диаграммы, дата на оси x изменяется на этот странный формат 2020-01-06T00:00:00.000000000. Даты из столбца «Конец недели текущего года» преобразуются в объект DateTime перед рисованием этого рисунка. Мой другой график (линейный график) использует аналогичные входные данные и формат, но у него нет этой проблемы, даты похожи на 2020-01-06.

Кто-нибудь знает, как решить эту проблему?

* Фреймы данных total_us и sub, которые я использую в своих графиках, являются подмножествами одного и того же набора данных. И я преобразовал дату в этом большом наборе данных перед созданием этих двух подмножеств. Таким образом, значение в столбце «Конец недели текущего года» для total_us и sub должно иметь одинаковый формат DateTime.

#create a pointplot to capture the variability                             
plt.figure(figsize = (8, 6))                                                  
sns.pointplot(x = 'Current Year Week Ending',                                               
              y = 'ASP Current Year', 
              hue ='Type', 
              data = sub, 
              markers=["o", "x"],
              linestyles=["-", "--"])                                
plt.xticks(rotation=45, horizontalalignment='right', fontweight='light', fontsize='medium')
plt.ticklabel_format(style='plain', axis='y')

enter image description here

#create a lineplot 
plt.figure(figsize=(10,7))
sns.lineplot(x='Current Year Week Ending', 
             y='Total Bulk and Bags Units', 
             hue='Type', 
             data = total_us);
plt.xticks(rotation=45, horizontalalignment='right', fontweight='light', fontsize='medium')
plt.ticklabel_format(style='plain', axis='y')

enter image description here

так выглядит sub, поэтому значения в столбце «Конец недели текущего года» выглядят как «06.01.2020». Я не знаю, почему это меняется, когда я рисую точечный график. enter image description here

1 Ответ

0 голосов
/ 21 июня 2020

Я думаю, ваш столбец даты может включать только эти завершающие нули, и seaborn обрабатывает их по-разному, в зависимости от того, сколько места на графике. Поэтому попробуйте следующее для столбца даты:

sub.iloc[:,1] = sub.iloc[:,1].dt.strftime('Y/%m/%d')

Если по какой-то причине это не решит проблему (возможно, точечные точечные графики и линейные графики делают что-то другое под капотом), тогда возможный обходной путь будет состоит в том, чтобы разделить текст 2020-01-06T00:00:00.000000000 на букву 'T' и выбросить завершающие нули после. Мы можем использовать тот факт, что sns.pointplot возвращает объект matplotlib.Axes (из документации ), установив переменную ax, равную вашему точечному графику:

ax = sns.pointplot(x = 'Current Year Week Ending',                                               
          y = 'ASP Current Year', 
          hue ='Type', 
          data = sub, 
          markers=["o", "x"],
          linestyles=["-", "--"]) 
ax.set_xticklabels([date_text.get_text().split("T")[0] for date_text in ax.get_xticklabels()])
...