Как установить datetime как zaxis без ошибки: OverflowError: Python int слишком велико, чтобы преобразовать в C long для трехмерного графика - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь построить трехмерное изображение, где z - время. Когда я пытаюсь установить метку zaxis на Год, месяц я получаю сообщение об ошибке.

Для этого:

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.scatter3D(df85['Messwert'], df85['average_cux'], df85['Datum'],c=df85['code'], cmap="jet_r")
ax.zaxis.set_major_formatter(dates.DateFormatter('%Y-%M'))

Я получаю эту ошибку:


OverflowError: Python int too large to convert to C long

<Figure size 432x288 with 1 Axes>

Без код набора Zaxis я получаю это изображение:

enter image description here

Заранее спасибо !!!

enter image description here

в нижней части "Datum":

Name: Datum, Length: 81, dtype: object

1 Ответ

0 голосов
/ 30 марта 2020

Ошибка переполнения возникает из-за того, что DateFormatter Matplotlib не может отобразить данные np.datetime64 напрямую, что должно быть в случае с вашими данными. Вам необходимо явно преобразовать ваши даты в datetime.date объекты.

Пожалуйста, посмотрите на это: https://matplotlib.org/3.1.1/gallery/recipes/common_date_problems.html

Ошибка переполнения возникает из-за того, что DateFormatter Matplotlib не может напрямую отобразить данные np.datetime64, что должно быть в случае с ваши данные. Вам необходимо явно преобразовать ваши даты в datetime.date объекты.

Пожалуйста, посмотрите на это: https://matplotlib.org/3.1.1/gallery/recipes/common_date_problems.html

Редактировать: Это может быть полезно для вас.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.dates import date2num, DateFormatter
import numpy as np
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
from datetime import datetime, timedelta

# a test dataframe
df = pd.DataFrame({
    'date': np.array([str(datetime(2020,3,30).date()+timedelta(x+1))+' 00:00:00' for x in range(200)], dtype='object'),
    'sales': np.random.randint(low=1, high=200, size=200),
    '%sales in US' : 30 * np.random.random_sample(size=200) + 20
})

# appropriate type conversions
df['date']= pd.to_datetime(df['date'])
df['date'] = df['date'].apply(date2num)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.scatter3D(df['sales'], df['%sales in US'], df['date'], c=df['date'], cmap="jet_r")
ax.zaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Y-%M'))
plt.xlabel('sales', fontsize=20)
plt.ylabel('%sales in US', fontsize=16)
ax.set_zlabel('date', fontsize=16) 
plt.show()

Вывод: https://imgur.com/a/WXM07it.jpg

...