Трехмерный график рассеяния в Python, извлеченный из дат - PullRequest
0 голосов
/ 08 ноября 2019

Вопрос:

Можно ли преобразовать день в строку вместо десятичного значения? Аналогично для Месяца.

Примечание: я уже посетил этот ( 3D Scatterplot со строками в Python ) ответ, который не решает мой вопрос.

Я работаю над собственным проектом, в котором я пытаюсь создать трехмерную диаграмму для моих поездок на основе данных, которые я извлек из своей активности в Google. Для справки я следую этому руководству: https://nvbn.github.io/2018/05/01/commute/

Я могу создать информативную 2D-диаграмму на основе атрибутов Месяц + Время и День + Время . объединить эти 2 графика.

3D-диаграмма, которую я хочу создать, требует 3 атрибута День (Пн / Вт), Месяц (Январь / Февраль), Время выполнения .

Учитывая, что matplotlib не поддерживает значения String в диаграммах сразу, я использовал Number для Day (0-7) и Month (1-12). Однако график кажется немного неясным с десятичными значениями для дней. Выглядит следующим образом: enter image description here

Мой текущий код выглядит следующим образом, получая weekday() для получения номера дня и month для месяца.

# How commute is calculated and grouped
import pandas as pd
#{...}
def get_commute_to_work():
#{...}
 yield Commute_to_work(pd.to_datetime(start.datetime), start.datetime, end.datetime, end.datetime - start.datetime)

#Now creating graph here

fig, ax = pyplot.subplots(subplot_kw={'projection': '3d'})
ax.grid()
ax.scatter([commute.day.weekday() for commute in normalised],
           [commute.day.month for commute in normalised],
           [commute.took.total_seconds() / 60 for commute in normalised])

ax.set(xlabel='Day',ylabel='Month' ,zlabel='commute (minutes)',
       title='Daily commute')
ax.legend()
pyplot.show()

в северном направленииесли вы хотите посмотреть на детали этого кода, он доступен на github здесь

1 Ответ

1 голос
/ 11 ноября 2019

Вы можете попробовать это (хотя я не проверил для 3d графика):

x_tick_labels = ['Sun','Mon','Tue','Wed','Thurs', 'Fri', 'Sat']

# Set number of ticks for x-axis
x = np.linspace(1.0, 4.0, 7)  # Why you have 9 days in a week is beyond me
ax.set_xticks(x)
# Set ticks labels for x-axis
ax.set_xticklabels(x_ticks_labels, rotation='vertical', fontsize=18)

Вы можете повторить аналогичную процедуру в течение нескольких месяцев.

Источник этого ответа здесь .

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