Matplotlib TypeError: неподдерживаемые типы операндов для -: 'datetime.date' и 'float' - PullRequest
0 голосов
/ 27 апреля 2018

У меня ошибка с кодом ниже. Этот график хорошо работает в Python2, но в Python3 у меня есть TypeError. Понятия не имею, как это исправить.

import matplotlib.pyplot as plt
from pylab import rcParams
import matplotlib.ticker as mtick
import matplotlib.dates as mdates
import numpy as np
import pandas as pd
from datetime import datetime, timedelta

DF = pd.DataFrame({
    'day':     [datetime(2018,1,1).date()+timedelta(x+1) for x in range(100)],
    'balance': np.random.normal(100,100,100)
})
rcParams['figure.figsize'] = 20, 10
fig, ax = plt.subplots()
ax.bar(DF['day'], DF['balance'], color='lightblue')
plt.xlabel('day', fontsize=20)
myFmt = mdates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(myFmt)
plt.show()

Ошибка:

TypeError Traceback (самый последний вызов последний) в () 5 rcParams ['figure.figsize'] = 20, 10 6 рис, топор = plt.subplots () ----> 7 ax.bar (DF ['day'], DF ['balance'], color = 'lightblue') 8 plt.xlabel («день», размер шрифта = 20) 9 myFmt = mdates.DateFormatter ('% Y-% m')

/ home / anaconda3 / lib / python3.6 / site-packages / matplotlib / init .py в внутренний (топор, * args, ** kwargs) 1896
warnings.warn (msg% (label_namer, func. name ), 1897
RuntimeWarning, уровень стека = 2) -> 1898 return func (ax, * args, ** kwargs) 1899 pre_doc = inner. doc 1900, если pre_doc равен None:

/ дома / anaconda3 / Библиотека / python3.6 / сайт-пакеты / Matplotlib / оси / _axes.py в баре (self, left, height, width, bottom, ** kwargs) 2103 если выровняйте == 'центр': 2104, если ориентация == 'вертикальный': -> 2105 left = [left [i] - ширина [i] / 2. для i в xrange (len (слева))] 2106 elif ориентация == 'горизонтальный': 2107 низ = [низ [i] - высота [i] / 2.

/ дома / anaconda3 / Библиотека / python3.6 / сайт-пакеты / Matplotlib / оси / _axes.py в (.0) 2103, если выровнять == 'center': 2104
если ориентация == 'вертикальная': -> 2105 left = [left [i] - ширина [i] / 2. для i в xrange (len (слева))] 2106 elif ориентация == 'горизонтальный': 2107 низ = [низ [i] - высота [i] / 2.

TypeError: неподдерживаемые типы операндов для -: 'datetime.date' и 'Поплавок'

1 Ответ

0 голосов
/ 27 апреля 2018

Используйте date2num в столбце даты

Ex:

import matplotlib.pyplot as plt
from pylab import rcParams
import matplotlib.ticker as mtick
import matplotlib.dates as mdates
from matplotlib.dates import date2num       #-->Update
import numpy as np
import pandas as pd
from datetime import datetime, timedelta

DF = pd.DataFrame({
    'day':     [datetime(2018,1,1).date()+timedelta(x+1) for x in range(100)],
    'balance': np.random.normal(100,100,100)
})
rcParams['figure.figsize'] = 20, 10
fig, ax = plt.subplots()
DF['day'] = DF['day'].apply(date2num)      #-->Update

ax.bar(DF['day'], DF['balance'], color='lightblue')
plt.xlabel('day', fontsize=20)
myFmt = mdates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(myFmt)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...