matplotlib 3d график

У меня есть список дат в формате 15/10/2017

Я попробовал следующее

 from matplotlib import pyplot import pandas as pd dates = ['15/10/2016', '16/10/2016', "17/10/2015", "15/10/2014"] dates_formatted = [pd.to_datetime(d) for d in dates ] x = [1,2,3,4] z = [5,6,7,8] pyplot.scatter(x, dates_formatted, z) pyplot.show() 

Он выдает ошибку TypeError: ufunc 'sqrt' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Он показывает, является ли это 2D. например pyplot.scatter(x, dates_formatted)

Я также попробовал следующее

 ax = Axes3D(fig) ax = fig.add_subplot(111,projection='3d') ax.scatter(x, dates_formatted, y) pyplot.show() 

Он выдает ошибку. Float() argument must be a string or number

2 Solutions collect form web for “matplotlib 3d график”

Не всегда тривиально говорить matplotlib как переводить строки в систему координат. Почему бы просто не установить пользовательские метки меток для осей?

 import pandas as pd from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt fig = plt.figure('scatter dates') ax = fig.add_subplot(111, projection='3d') dates = ['15/10/2016', '16/10/2016', "17/10/2015", "15/10/2014"] dates_formatted = [pd.to_datetime(d) for d in dates ] x = [1,2,3,4] y = [9,10,11,12] z = [5,6,7,8] ax.scatter(x, y, z) ax.xaxis.set_ticks(x) ax.xaxis.set_ticklabels(dates_formatted) plt.show() 

введите описание изображения здесь

Scatter ожидает число. Таким образом, вы можете конвертировать свои даты в номер следующим образом:

 y = [ (d-min(dates_formatted)).days for d in dates_formatted] 

Теперь вы можете построить данные как

 pyplot.scatter(x, y) 

Для 3D-сюжета вы можете попробовать что-то вроде этого …

 import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D plt.ion() x = [1,2,3,4] z = [5,6,7,8] dates = ['15/10/2016', '16/10/2016', "17/10/2015", "15/10/2014"] dates_formatted = [pd.to_datetime(d) for d in dates] y = [ (d-min(dates_formatted)).days for d in dates_formatted] fig = plt.figure() ax = fig.add_subplot(111, projection='3d') plt.scatter(x, y, z) 

Ось y теперь в днях. Вы можете изменить это, найдя строку даты и изменив ее обратно …

 dt = [ pd.Timedelta(d) + min(dates_formatted) for d in ax.get_yticks()] 

Преобразуйте их в строки …

 dtStr = [d.isoformat() for d in dt] 

И верните их обратно

 ax.set_yticklabels(dtStr) 
  • Добавление одного и того же экземпляра Patch к нескольким подсети в matplotlib
  • Удалите значения NaN из кадра данных без fillna или Interpolate
  • Контур Limit / mask matplotlib в области данных
  • Преобразование блоков данных matplotlib в нормализованные единицы
  • Как сгенерировать несколько графиков, щелкнув один график для получения дополнительной информации, используя интерактивные события python
  • Как сохранить графики из нескольких сценариев python с помощью интерактивной команды процесса C #?
  • Создание штабелированного участка цилиндра в matplotlib
  • Что случилось с сюжетом Панды?
  • Построение линейного графика с барами ошибок и точками данных из pandas DataFrame
  • Как найти медиану на графике KDE?
  • Построение данных с прокручиваемой осью x (время / горизонталь) на Linux
  • Python - лучший язык программирования в мире.