Я отвечал на этот вопрос , когда мне сказали, что лучше разместить мой ответ здесь. В основном, мое решение извлекает многоугольники, которые используются для рисования береговых линий экземпляра Basemap
и объединяет эти многоугольники с контуром карты, чтобы создать matplotlib.PathPatch
, который накладывает океанские области карты.
Это особенно полезно, если данные грубые, и интерполяция данных не нужна. В этом случае использование maskoceans
создает очень зернистый контур береговых линий, который выглядит не очень хорошо.
Вот тот же пример, который я отправил как ответ на другой вопрос:
from matplotlib import pyplot as plt
from mpl_toolkits import basemap as bm
from matplotlib import colors
import numpy as np
import numpy.ma as ma
from matplotlib.patches import Path, PathPatch
fig, ax = plt.subplots()
lon_0 = 319
lat_0 = 72
##some fake data
lons = np.linspace(lon_0-60,lon_0+60,10)
lats = np.linspace(lat_0-15,lat_0+15,5)
lon, lat = np.meshgrid(lons,lats)
TOPO = np.sin(np.pi*lon/180)*np.exp(lat/90)
m = bm.Basemap(resolution='i',projection='laea', width=1500000, height=2900000, lat_ts=60, lat_0=lat_0, lon_0=lon_0, ax = ax)
m.drawcoastlines(linewidth=0.5)
x,y = m(lon,lat)
pcol = ax.pcolormesh(x,y,TOPO)
##getting the limits of the map:
x0,x1 = ax.get_xlim()
y0,y1 = ax.get_ylim()
map_edges = np.array([[x0,y0],[x1,y0],[x1,y1],[x0,y1]])
##getting all polygons used to draw the coastlines of the map
polys = [p.boundary for p in m.landpolygons]
##combining with map edges
polys = [map_edges]+polys[:]
##creating a PathPatch
codes = [
[Path.MOVETO] + [Path.LINETO for p in p[1:]]
for p in polys
]
polys_lin = [v for p in polys for v in p]
codes_lin = [c for cs in codes for c in cs]
path = Path(polys_lin, codes_lin)
patch = PathPatch(path,facecolor='white', lw=0)
##masking the data:
ax.add_patch(patch)
plt.show()
В результате получается следующий график:
Надеюсь, это кому-то поможет:)
Попробуйте вот так:
const stateMap = (state) => {
console.log('state', state);
return {
//something from state
};
};
export default connect(stateMap)(App);
Сначала я хотел бы отметить, что я согласен с ответом @ markerikson, используйте функцию вместо декоратора.
Если вы сделали , хотите использовать декораторы, хотя, было бы еще несколько шагов. Вы добавили плагин к своим зависимостям, но не сказали Бабелю использовать его.
Создать приложение React использует Webpack с Babel под капотом, а именно, в сценариях реагирования. Вам нужно настроить эту настройку Babel. Способ создания «Создать приложение для реагирования» - это изгнать из приложения «Создать реакцию», а затем отредактировать .babelrc - см. https://babeljs.io/docs/plugins/transform-decorators/ # использование-через-babelrc-рекомендуется -
Обратите внимание, что команды React и Redux обычно препятствуют использованию декораторов. Вместо этого в этом случае вы должны использовать функцию connect()
как функцию:
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);