Итак, я хочу построить карту 3d
, используя matplotlib basemap
. Но выскакивает сообщение об ошибке.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.basemap import Basemap
from matplotlib.collections import PolyCollection
import numpy as np
map = Basemap(llcrnrlon=-20,llcrnrlat=0,urcrnrlon=15,urcrnrlat=50,)
fig = plt.figure()
ax = Axes3D(fig)
#ax.set_axis_off()
ax.azim = 270
ax.dist = 7
polys = []
for polygon in map.landpolygons:
polys.append(polygon.get_coords())
lc=PolyCollection(polys,edgecolor='black',facecolor='#DDDDDD',closed=False)
ax.add_collection3d(lc)
ax.add_collection3d(map.drawcoastlines(linewidth=0.25))
ax.add_collection3d(map.drawcountries(linewidth=0.35))
lons = np.array([-13.7, -10.8, -13.2, -96.8, -7.99, 7.5, -17.3, -3.7])
lats = np.array([9.6, 6.3, 8.5, 32.7, 12.5, 8.9, 14.7, 40.39])
cases = np.array([1971, 7069, 6073, 4, 6, 20, 1, 1])
deaths = np.array([1192, 2964, 1250, 1, 5, 8, 0, 0])
places = np.array(['Guinea', 'Liberia', 'Sierra Leone','United States','Mali','Nigeria', 'Senegal', 'Spain'])
x, y = map(lons, lats)
ax.bar3d(x, y, np.zeros(len(x)), 2, 2, deaths, color= 'r', alpha=0.8)
plt.show()
Я получил сообщение об ошибке в строке 21 {т.е. ax.add_collection3d(map.drawcoastlines(linewidth=0.25))
}, говорящее: -
'It is not currently possible to manually set the aspect '
NotImplementedError: It is not currently possible to manually set the aspect on 3D axes'
Я нашел этот вопрос, потому что у меня был точный вопрос.
Позже я случайно наткнулся на документация, который показал обходной путь - если настройка аспекта не реализована, то давайте не будем устанавливать его, установив для fix_aspect значение false:
map = Basemap(fix_aspect=False)
РЕДАКТИРОВАТЬ:
Я полагаю, мне следует добавить немного больше к моему предыдущему ответу, чтобы было немного легче понять, что делать.
NotImplementedError
— это преднамеренное добавление командой matplotlib, как видно здесь. Ошибка говорит о том, что мы пытаемся исправить соотношение сторон графика, но это не реализовано в 3D-графиках.
Эта ошибка возникает при использовании mpl_toolkits.basemap()
с 3D-графиками, поскольку она устанавливает fix_aspect=True
с помощью По умолчанию.
Поэтому, чтобы избавиться от NotImplementedError
, можно добавить fix_aspect=False
при вызове mpl_toolkits.basemap()
. Например:
map = Basemap(llcrnrlon=-20,llcrnrlat=0,urcrnrlon=15,urcrnrlat=50,fix_aspect=False)