raphaelquast / eomaps Goto Github PK
View Code? Open in Web Editor NEWA library to create interactive maps of geographical datasets
Home Page: https://eomaps.readthedocs.io/
License: BSD 3-Clause "New" or "Revised" License
A library to create interactive maps of geographical datasets
Home Page: https://eomaps.readthedocs.io/
License: BSD 3-Clause "New" or "Revised" License
When I import EOmaps, I obtain the following import error
ImportError Traceback (most recent call last)
Input In [9], in <cell line: 1>()
----> 1 import eomaps
File ~\anaconda3\envs\specavail1\lib\site-packages\eomaps_init_.py:1, in
----> 1 from .eomaps import Maps, MapsGrid
2 from ._version import version
4 author = "Raphael Quast"
File ~\anaconda3\envs\specavail1\lib\site-packages\eomaps\eomaps.py:112, in
102 from cartopy import crs as ccrs
104 from .helpers import (
105 pairwise,
106 cmap_alpha,
(...)
110 searchtree,
111 )
--> 112 from ._shapes import shapes
114 from ._containers import (
115 data_specs,
116 map_objects,
(...)
120 NaturalEarth_features,
121 )
123 from ._cb_container import cb_container
File ~\anaconda3\envs\specavail1\lib\site-packages\eomaps_shapes.py:2, in
1 from matplotlib.collections import PolyCollection, QuadMesh
----> 2 from matplotlib.tri import TriMesh, Triangulation
3 import numpy as np
5 from pyproj import CRS, Transformer
ImportError: cannot import name 'TriMesh' from 'matplotlib.tri' (C:\Users\user\anaconda3\envs\specavail1\lib\site-packages\matplotlib\tri_init_.py)
Note: you may need to restart the kernel to use updated packages.
argon2-cffi 21.3.0 pyhd3eb1b0_0
argon2-cffi-bindings 21.2.0 py310h2bbff1b_0
asttokens 2.0.5 pyhd3eb1b0_0
attrs 22.1.0 pypi_0 pypi
backcall 0.2.0 pyhd3eb1b0_0
beautifulsoup4 4.11.1 py310haa95532_0
bleach 4.1.0 pyhd3eb1b0_0
blosc 1.21.1 h74325e0_3 conda-forge
boost-cpp 1.78.0 h9f4b32c_1 conda-forge
branca 0.5.0 pyhd8ed1ab_0 conda-forge
brotli 1.0.9 h8ffe710_7 conda-forge
brotli-bin 1.0.9 h8ffe710_7 conda-forge
brotlipy 0.7.0 py310he2412df_1004 conda-forge
bzip2 1.0.8 he774522_0
ca-certificates 2022.9.14 h5b45459_0 conda-forge
cairo 1.16.0 hd694305_1014 conda-forge
cairocffi 1.3.0 pyhd8ed1ab_0 conda-forge
cairosvg 2.5.2 pyhd8ed1ab_0 conda-forge
cartopy 0.21.0 py310h05326cb_0 conda-forge
certifi 2022.9.14 pyhd8ed1ab_0 conda-forge
cffi 1.15.1 py310h2bbff1b_0
cfitsio 4.1.0 h5a969a9_0 conda-forge
charset-normalizer 2.1.1 pyhd8ed1ab_0 conda-forge
click 8.1.3 py310h5588dad_0 conda-forge
click-plugins 1.1.1 py_0 conda-forge
cligj 0.7.2 pyhd8ed1ab_1 conda-forge
cloudpickle 2.2.0 pyhd8ed1ab_0 conda-forge
colorama 0.4.5 py310haa95532_0
colorcet 3.0.0 pyhd8ed1ab_0 conda-forge
contourpy 1.0.5 py310h232114e_0 conda-forge
cryptography 37.0.4 py310ha857299_0 conda-forge
cssselect2 0.2.1 pyh9f0ad1d_1 conda-forge
curl 7.83.1 h789b8ee_0 conda-forge
cycler 0.11.0 pyhd8ed1ab_0 conda-forge
dask-core 2022.9.1 pyhd8ed1ab_0 conda-forge
datashader 0.14.2 pyh6c4a22f_0 conda-forge
datashape 0.5.4 py_1 conda-forge
debugpy 1.5.1 py310hd77b12b_0
decorator 5.1.1 pyhd3eb1b0_0
defusedxml 0.7.1 pyhd3eb1b0_0
descartes 1.1.0 py_4 conda-forge
docopt 0.6.2 pypi_0 pypi
entrypoints 0.4 py310haa95532_0
eomaps 4.4.2 pyhd8ed1ab_0 conda-forge
executing 0.8.3 pyhd3eb1b0_0
expat 2.4.9 h1537add_0 conda-forge
fiona 1.8.21 pypi_0 pypi
flask 2.2.2 pypi_0 pypi
folium 0.12.1.post1 pyhd8ed1ab_1 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 hab24e00_0 conda-forge
fontconfig 2.14.0 hce3cb01_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.37.3 py310h8d17308_0 conda-forge
freetype 2.12.1 h546665d_0 conda-forge
freexl 1.0.6 ha8e266a_0 conda-forge
fsspec 2022.8.2 pyhd8ed1ab_0 conda-forge
gdal 3.4.3 pypi_0 pypi
geopandas 0.11.1 pyhd8ed1ab_0 conda-forge
geopandas-base 0.11.1 pyha770c72_0 conda-forge
geos 0.2.3 pypi_0 pypi
geotiff 1.7.1 h714bc5f_3 conda-forge
gettext 0.19.8.1 ha2e2712_1008 conda-forge
hdf4 4.2.15 h0e5069d_4 conda-forge
hdf5 1.12.2 nompi_h2a0e4a3_100 conda-forge
icu 70.1 h0e60522_0 conda-forge
idna 3.4 pyhd8ed1ab_0 conda-forge
intel-openmp 2022.1.0 h57928b3_3787 conda-forge
ipykernel 6.15.2 py310haa95532_0
ipython 8.4.0 py310haa95532_0
ipython_genutils 0.2.0 pyhd3eb1b0_1
itsdangerous 2.1.2 pypi_0 pypi
jedi 0.18.1 py310haa95532_1
jinja2 3.1.2 pypi_0 pypi
joblib 1.2.0 pyhd8ed1ab_0 conda-forge
jpeg 9e h8ffe710_2 conda-forge
js2py 0.71 pypi_0 pypi
jsonschema 4.4.0 py310haa95532_0
jupyter_client 7.3.5 py310haa95532_0
jupyter_core 4.10.0 py310haa95532_0
jupyterlab_pygments 0.1.2 py_0
kealib 1.4.15 hdf81f3a_1 conda-forge
kiwisolver 1.4.4 py310h476a331_0 conda-forge
krb5 1.19.3 h1176d77_0 conda-forge
lcms2 2.12 h2a16943_0 conda-forge
lerc 4.0.0 h63175ca_0 conda-forge
libblas 3.9.0 16_win64_mkl conda-forge
libbrotlicommon 1.0.9 h8ffe710_7 conda-forge
libbrotlidec 1.0.9 h8ffe710_7 conda-forge
libbrotlienc 1.0.9 h8ffe710_7 conda-forge
libcblas 3.9.0 16_win64_mkl conda-forge
libcurl 7.83.1 h789b8ee_0 conda-forge
libdeflate 1.13 h8ffe710_0 conda-forge
libffi 3.4.2 hd77b12b_4
libgdal 3.5.2 hc386656_1 conda-forge
libglib 2.72.1 h3be07f2_0 conda-forge
libiconv 1.16 he774522_0 conda-forge
libkml 1.3.0 hf2ab4e4_1015 conda-forge
liblapack 3.9.0 16_win64_mkl conda-forge
libnetcdf 4.8.1 nompi_h85765be_104 conda-forge
libpng 1.6.38 h19919ed_0 conda-forge
libpq 14.5 hfcc5ef8_0 conda-forge
librttopo 1.1.0 h2842628_11 conda-forge
libsodium 1.0.18 h62dcd97_0
libspatialindex 1.9.3 h39d44d4_4 conda-forge
libspatialite 5.0.1 ha17912d_18 conda-forge
libsqlite 3.39.3 hcfcfb64_0 conda-forge
libssh2 1.10.0 h680486a_3 conda-forge
libtiff 4.4.0 h92677e6_3 conda-forge
libwebp-base 1.2.4 h8ffe710_0 conda-forge
libxcb 1.13 hcd874cb_1004 conda-forge
libxml2 2.9.14 hf5bbc77_4 conda-forge
libzip 1.9.2 hfed4ece_1 conda-forge
libzlib 1.2.12 hcfcfb64_3 conda-forge
llvmlite 0.38.1 py310h2c03ce5_0 conda-forge
locket 1.0.0 pyhd8ed1ab_0 conda-forge
lxml 4.9.1 pypi_0 pypi
lz4-c 1.9.3 h8ffe710_1 conda-forge
m2w64-gcc-libgfortran 5.3.0 6 conda-forge
m2w64-gcc-libs 5.3.0 7 conda-forge
m2w64-gcc-libs-core 5.3.0 7 conda-forge
m2w64-gmp 6.1.0 2 conda-forge
m2w64-libwinpthread-git 5.0.0.4634.697f757 2 conda-forge
mapclassify 2.4.3 pyhd8ed1ab_0 conda-forge
markupsafe 2.1.1 py310h2bbff1b_0
matplotlib-base 3.6.0 py310h51140c5_0 conda-forge
matplotlib-inline 0.1.6 py310haa95532_0
mistune 0.8.4 py310h2bbff1b_1000
mkl 2022.1.0 h6a75c08_874 conda-forge
msys2-conda-epoch 20160418 1 conda-forge
multipledispatch 0.6.0 py_0 conda-forge
munch 2.5.0 py_0 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
nbclient 0.5.13 py310haa95532_0
nbconvert 6.4.4 py310haa95532_0
nbformat 5.5.0 py310haa95532_0
nest-asyncio 1.5.5 py310haa95532_0
networkx 2.8.6 pyhd8ed1ab_0 conda-forge
notebook 6.4.12 py310haa95532_0
numba 0.55.2 py310h77579ad_0 conda-forge
numpy 1.22.4+vanilla pypi_0 pypi
openjpeg 2.5.0 hc9384bd_1 conda-forge
openssl 1.1.1q h8ffe710_0 conda-forge
owslib 0.27.2 pyhd8ed1ab_1 conda-forge
packaging 21.3 pyhd8ed1ab_0 conda-forge
pandas 1.4.3 pypi_0 pypi
pandocfilters 1.5.0 pyhd3eb1b0_0
param 1.12.2 pyh6c4a22f_0 conda-forge
parso 0.8.3 pyhd3eb1b0_0
partd 1.3.0 pyhd8ed1ab_0 conda-forge
pcre 8.45 h0e60522_0 conda-forge
pickleshare 0.7.5 pyhd3eb1b0_1003
pillow 9.2.0 py310h52929f7_2 conda-forge
pip 22.1.2 py310haa95532_0
pipwin 0.5.2 pypi_0 pypi
pixman 0.40.0 h8ffe710_0 conda-forge
poppler 22.04.0 hb57f792_3 conda-forge
poppler-data 0.4.11 hd8ed1ab_0 conda-forge
postgresql 14.5 h1c22c4f_0 conda-forge
proj 9.0.1 h1cfcee9_1 conda-forge
prometheus_client 0.14.1 py310haa95532_0
prompt-toolkit 3.0.20 pyhd3eb1b0_0
psutil 5.9.0 py310h2bbff1b_0
pthread-stubs 0.4 hcd874cb_1001 conda-forge
pure_eval 0.2.2 pyhd3eb1b0_0
pycparser 2.21 pyhd3eb1b0_0
pyct 0.4.6 py_0 conda-forge
pyct-core 0.4.6 py_0 conda-forge
pyepsg 0.4.0 py_0 conda-forge
pygments 2.11.2 pyhd3eb1b0_0
pyjsparser 2.7.1 pypi_0 pypi
pyopenssl 22.0.0 pyhd8ed1ab_0 conda-forge
pyparsing 3.0.9 pyhd8ed1ab_0 conda-forge
pyprind 2.11.3 pypi_0 pypi
pyproj 3.4.0 py310h6377384_0 conda-forge
pyrsistent 0.18.0 py310h2bbff1b_0
pyshp 2.3.1 pyhd8ed1ab_0 conda-forge
pysmartdl 1.3.4 pypi_0 pypi
pysocks 1.7.1 pyh0701188_6 conda-forge
python 3.10.4 hbb2ffb3_0
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python-fastjsonschema 2.16.2 py310haa95532_0
python_abi 3.10 2_cp310 conda-forge
pytz 2022.2.1 pyhd8ed1ab_0 conda-forge
pytz-deprecation-shim 0.1.0.post0 pypi_0 pypi
pywin32 302 py310h2bbff1b_2
pywinpty 2.0.2 py310h5da7b33_0
pyyaml 6.0 py310he2412df_4 conda-forge
pyzmq 23.2.0 py310hd77b12b_0
requests 2.28.1 pyhd8ed1ab_1 conda-forge
rtree 1.0.0 py310h1cbd46b_1 conda-forge
scikit-learn 1.1.2 py310h3a564e9_0 conda-forge
scipy 1.9.1 py310h578b7cb_0 conda-forge
send2trash 1.8.0 pyhd3eb1b0_1
setuptools 63.4.1 py310haa95532_0
shapely 1.8.2 pypi_0 pypi
six 1.16.0 pyh6c4a22f_0 conda-forge
snappy 1.1.9 h82413e6_1 conda-forge
soupsieve 2.3.2.post1 pypi_0 pypi
sqlite 3.39.2 h2bbff1b_0
stack_data 0.2.0 pyhd3eb1b0_0
tbb 2021.5.0 h91493d7_2 conda-forge
terminado 0.13.1 py310haa95532_0
testpath 0.6.0 py310haa95532_0
threadpoolctl 3.1.0 pyh8a188c0_0 conda-forge
tiledb 2.11.2 h5689973_0 conda-forge
tinycss2 1.1.1 pyhd8ed1ab_0 conda-forge
tk 8.6.12 h2bbff1b_0
toolz 0.12.0 pyhd8ed1ab_0 conda-forge
tornado 6.2 py310h2bbff1b_0
traitlets 5.1.1 pyhd3eb1b0_0
trimesh 3.15.1 pypi_0 pypi
typing-extensions 4.3.0 py310haa95532_0
typing_extensions 4.3.0 py310haa95532_0
tzdata 2022.2 pypi_0 pypi
tzlocal 4.2 pypi_0 pypi
ucrt 10.0.20348.0 h57928b3_0 conda-forge
unicodedata2 14.0.0 py310he2412df_1 conda-forge
urllib3 1.26.12 pypi_0 pypi
vc 14.2 h21ff451_1
vs2015_runtime 14.29.30139 h890b9b1_7 conda-forge
wcwidth 0.2.5 pyhd3eb1b0_0
webencodings 0.5.1 py310haa95532_1
werkzeug 2.2.2 pypi_0 pypi
wheel 0.37.1 pyhd3eb1b0_0
win_inet_pton 1.1.0 py310h5588dad_4 conda-forge
wincertstore 0.2 py310haa95532_2
winpty 0.4.3 4
xarray 2022.6.0 pyhd8ed1ab_1 conda-forge
xerces-c 3.2.3 h0e60522_5 conda-forge
xmltodict 0.13.0 pyhd8ed1ab_0 conda-forge
xorg-libxau 1.0.9 hcd874cb_0 conda-forge
xorg-libxdmcp 1.1.3 hcd874cb_0 conda-forge
xyzservices 2022.9.0 pyhd8ed1ab_0 conda-forge
xz 5.2.6 h8d14728_0 conda-forge
yaml 0.2.5 h8ffe710_2 conda-forge
zeromq 4.3.4 hd77b12b_0
zlib 1.2.12 h8cc25b3_3
zstd 1.5.2 h7755175_4 conda-forge
The position of the extension-arrows is not properly updated when using m.subplots_adjust(...)
after the colorbar has been added
m = Maps()
m.set_data([1,2,3], [1,2,3], [1,2,3])
m.plot_map(vmin=1.2, vmax=2.5)
m.add_colorbar()
m.subplots_adjust(left=.3)
the histogram plot (implemented here) using a custom colorbar should be a dedicated function that can be easily used externally by passing the correct arguments, since it can be quite useful for other (non-map) plots as well
histogram bins that extend beyond a colorbar color-split are not properly colored
... a feature request that occasionally pops up...
At the moment, legends added by m.add_gdf
are not properly handled.
from eomaps import Maps
m = Maps()
gdf = m.add_feature.cultural.admin_0_countries.get_gdf()
m.add_gdf(gdf, legend=True, column="scalerank")
from eomaps import Maps
m = Maps()
gdf = m.add_feature.cultural.admin_0_countries.get_gdf()
m.add_gdf(gdf, legend=True, column="scalerank", scheme="Quantiles")
# find the added legend object and add it as an artist
leg = next(i for i in m.ax.get_children() if i.__class__.__name__=="Legend")
m.BM.add_artist(leg, layer=m.layer)
At the moment the "frameon"
kwarg (forwarded to plt.figure()
does not work as expected since spines/frames are
handled differently in EOmaps v6.x )
from eomaps import Maps
m = Maps(frameon=False)
m.add_feature.preset.coastline()
Expected behaviour: no frames should be drawn for the axes of this Maps
object with frameon=False
As temporary quick-fix one can use:
m = Maps()
m.ax.spines["geo"].set_edgecolor("none")
Just a question. As EOmaps is based on matplotlib for plotting, is it possible to use it for embedding maps into wxpython based app? Matplotlib plot can be embedded so I imagine EOmaps could be embedded too.
Cheers.
...\lib\site-packages\pyproj\geod.py:827: UserWarning: Back azimuth is being returned by default to be compatible with inv()This is a breaking change for pyproj 3.5+.To avoid this warning, set return_back_azimuth=True.Otherwise, to restore old behaviour, set return_back_azimuth=False.This warning will be removed in future version.
warnings.warn(
...\lib\site-packages\pyproj\geod.py:680: UserWarning: Back azimuth is being returned by default to be compatible with fwd()This is a breaking change for pyproj 3.5+.To avoid this warning, set return_back_azimuth=True.Otherwise, to restore old behaviour, set return_back_azimuth=False.This warning will be removed in future version.
warnings.warn(
crs-specific webmap services in the companion-widget are not properly cached!
hi there,
from eomaps import Maps
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('...csv')
m = Maps()
m.set_data(data=df, xcoord='...', ycoord='...', parameter='...', crs=4326)
m.set_shape.geod_circles(10000)
m.plot_map()
i was getting an exception thrown from the 'fiona' module:
Traceback (most recent call last):
File "/opt/ws-py/eomaps/test.py", line 1, in <module>
from eomaps import Maps, MapsGrid
File "/opt/ws-py/eomaps/.env/lib/python3.10/site-packages/eomaps/__init__.py", line 11, in <module>
from .eomaps import Maps, MapsGrid
File "/opt/ws-py/eomaps/.env/lib/python3.10/site-packages/eomaps/eomaps.py", line 26, in <module>
from cartopy import crs as ccrs
File "/opt/ws-py/eomaps/.env/lib64/python3.10/site-packages/cartopy/__init__.py", line 108, in <module>
import cartopy.feature # noqa: F401 (flake8 = unused import)
File "/opt/ws-py/eomaps/.env/lib64/python3.10/site-packages/cartopy/feature/__init__.py", line 18, in <module>
import cartopy.io.shapereader as shapereader
File "/opt/ws-py/eomaps/.env/lib64/python3.10/site-packages/cartopy/io/shapereader.py", line 43, in <module>
import fiona
File "/opt/ws-py/eomaps/.env/lib64/python3.10/site-packages/fiona/__init__.py", line 87, in <module>
with fiona._loading.add_gdal_dll_directories():
AttributeError: partially initialized module 'fiona' has no attribute '_loading' (most likely due to a circular import). Did you mean: 'logging'?
replacing the lines:
import fiona._loading
with fiona._loading.add_gdal_dll_directories():
in .../.env/lib64/python3.10/site-packages/fiona/__init__.py
--.env
being the directory of a virtual env created inside the project where the code resides-- w/
import _loading
with _loading.add_gdal_dll_directories():
solved this problem.
adding
plt.show()
at the end causes the map's figure window to open which seems to solve the problem but i'm unsure of what consequences that work-around may cause later.
my environment is the following:
are these known problems, issues related to my environment, or something(s) i missed in installing and using the module?
TIA + cheers;
Hello.
I have reconstructed my anaconda env.
Before reconstructing the env, I used code "m.ax.add_geometries~" with eomaps, which is pure cartopy code except "m.", to draw modified map. But now that code does not work. is this only my problem?
code example:
import cartopy.crs as ccrs
import cartopy.feature as cf
from eomaps import Maps, MapsGrid
import cartopy.io.shapereader as shpreader
m = Maps(crs=5179)
m.ax.set_extent([124.598822,131.87222222,38.70000000,33.10000000], crs=ccrs.PlateCarree()) ## Important
m.ax.axis('off')
m.ax.add_feature(cf.OCEAN.with_scale("50m"))
shpfilename = shpreader.natural_earth(resolution='50m', category='cultural', name='admin_0_countries')
reader = shpreader.Reader(shpfilename)
countries = reader.records()
for country in countries:
if country.attributes['ADM0_A3'] == 'KOR':
m.ax.add_geometries(country.geometry, ccrs.PlateCarree(), facecolor=cf.COLORS['water'], edgecolor=cf.COLORS['water'])
m.ax.add_feature(cf.BORDERS, linewidth=0.7, linestyle=':', zorder=5) # country borders in cartopy.
Hi Raphael, I just suddenly came up with an idea. What if you or somebody (perhaps me), try to combine EOmaps with Streamlit?
I guess one benefit will be that more users with little or no Python knowledge can be able to use your EOmaps tools, at least locally.
I understand that a Streamlit APP can be quite big in size. But if just running them locally, then it may not be a big problem? Once a Streamlit App is built by an experienced Python user in a group, he/she can pass it to other users, who will just use the Streamlit APP to carry on some routine analysis?
I am just thinking, not sure about feasibility, challenges, whether it is worth the effort and time.
extend="neither"
in the colorbar to allow sharing the axes-limits between ax_cb
and ax_cb_plot
properly incorporate the extend-fraction in the limits of the histogram axes on top of the colorbar
Somehow cartopy's reprojection does not work here
from eomaps import Maps
m = Maps(crs = Maps.CRS.Robinson())
gdf = m.add_feature.preset.ocean()
...but geopandas-reprojection does!:
from eomaps import Maps
m = Maps(crs = Maps.CRS.Robinson())
gdf = m.add_feature.preset.ocean(reproject="gpd")
or
from eomaps import Maps
m = Maps(crs = Maps.CRS.Robinson())
gdf = m.add_feature.preset.ocean.feature.get_gdf()
m.add_gdf(gdf, fc='lightsteelblue')
Receive a warning when importing Maps from eomaps: Cannot import name 'TriMesh' from matplotlib.tri.
The location of TriMesh
changed between matplotlib v3.5.x
and matplotlib v3.6.x
(see matplotlib/matplotlib#24105)
This line gives an error after installation
Line 3 in 8e4d5e1
While running a script with >90 million datapoints following error occured, even tough i installed the datashader module explicitly during the installation of eomaps:
`AssertionError: EOmaps: Missing dependency: 'datashader'
please install (conda install -c conda-forge datashader) to use 'shade_raster'
Output from spyder call 'get_namespace_view':
EOmaps-Warning: you attempt to plot a large dataset(90280000 datapoints) but the 'datashader' library could not be imported!
The plot might take long to finish!... defaulting to 'ellipses' as plot-shape.`
A Check with conda list
showed that it truly is installed:
datashader 0.14.1 pyh6c4a22f_1 conda-forge
Trying an import in the beginning of my script (import datashader as ds
) escalates in:
Traceback (most recent call last):
File "C:\Users\KFalkner\AppData\Local\Temp\ipykernel_6124\3866946782.py", line 1, in <cell line: 1>
import datashader as ds
File "C:\Users\KFalkner\Anaconda3\envs\eomaps\lib\site-packages\datashader\__init__.py", line 8, in <module>
from .core import Canvas # noqa (API import)
File "C:\Users\KFalkner\Anaconda3\envs\eomaps\lib\site-packages\datashader\core.py", line 13, in <module>
from .utils import Dispatcher, ngjit, calc_res, calc_bbox, orient_array, \
File "C:\Users\KFalkner\Anaconda3\envs\eomaps\lib\site-packages\datashader\utils.py", line 8, in <module>
import numba as nb
File "C:\Users\KFalkner\Anaconda3\envs\eomaps\lib\site-packages\numba\__init__.py", line 200, in <module>
_ensure_critical_deps()
File "C:\Users\KFalkner\Anaconda3\envs\eomaps\lib\site-packages\numba\__init__.py", line 140, in _ensure_critical_deps
raise ImportError("Numba needs NumPy 1.21 or less")
ImportError: Numba needs NumPy 1.21 or less
This are the versions installed:
numba 0.55.0 py310h4ed8f06_0
numpy 1.23.1 py310h8a5b91a_0 conda-forge
I have very little knowledge about modules/packages, but somehow it seems that when installing eomaps a newer (or the newest?) version of numpy is used, which is not compatible with numba yet.
I downgraded numpy and everything works fine now:
pip install numpy==1.21.6
I had the same issue on 2 Computers so i guess this could be a common problem why i wanted to let you know.
After update, savefig gives me black paper.
my code:
m = Maps(crs=5179, frameon=False)
~
m.snapshot(clear=True)
m.savefig('name.png', dpi=300, bbox_inches='tight', pad_inches=0.1, facecolor='auto', edgecolor='auto')
plt.close()
snapshot works well but savefig gives me black paper
at the moment cpos="c"
is hardcoded ...
(other options need to be checked to work properly)
All keys for keypress-callbacks are expected to be entered as strings!
m.cb.keypress.attach(key=0)
does not throw a warning... but only m.cb.keypress.attach(key="0")
works!
improve startup time by loading modules only when they are required
(this is already done but it can be improved)
split package into eomaps_base
and eomaps
would be nice to be able to install a "minimal version" and a "full version" of eomaps (similar to matplotlib_base
and matplotlib
) ... I don't really know how to do this properly... any help is highly appreciated!)
eomaps_base
: only the most basic needs (e.g. matplotlib
, cartopy
, numpy
etc.)eomaps
: eomaps_base
and all optional dependencies ( e.g. pyqt
, datashader
, xarray
, rasterio
etc.)Hello.
EOmaps has good functions that can be applied to my map data analysis.
However, in my case, the interactive figure output is too slow to use if it is on the cell of the jupyter notebook (%matplotlib notebook).
If I obtain the interactive figure on the new window (%matplotlib qt), the speed is quite good for use.
Actually, I need a just fixed analysis output around the specific country on the jupyter notebook. So can I obtain this kind of noninterative figure output on the jupyter notebook ??
Somehow bullet-lists don't render properly at the moment when using docutils > 0.16
(docs use test_env.yml
environment)
Any help to make the docs render properly with the latest
docutils
version is highly appreciated!
relevant sources:
Irregularly sampled data causes issues with the raster
shape if a zoomed-in region is selected.
m = Maps()
sx, sy = 100, 100
lon = np.sort(np.random.choice(np.linspace(-150,150, sx*10), size=sx, replace=False))
lat = np.sort(np.random.choice(np.linspace(-75, 68, sy*10), size=sy, replace=False))
data = np.random.randint(0, 100, (lon.size, lat.size))
m.set_data(data, lon, lat)
m.set_shape.raster()
m.plot_map()
Always use the full dataset instead of pre-selecting the data based on the visible extent
m = Maps()
# set the margin-factors BEFORE setting the data to disable
# pre-selection of data with respect to the visible extent
m._data_manager.set_margin_factors(np.inf, np.inf)
...
At the moment WebMap services that provide tiles at non-standard dpi are not fetched correctly...
The issue originates most probably from somewhere in here (maybe some kind of a tilePixelRatio needs to be implemented
to take care of the different tile-sizes?)
Lines 1193 to 1197 in 76a1ef0
Here's an example for a high-dpi (512 instead of 96) wms service that does not work as expected...
from eomaps import Maps
m = Maps(Maps.CRS.GOOGLE_MERCATOR)
m.set_extent_to_location("wien")
m.add_wms.Austria.AT_basemap.add_layer.bmaphidpi()
# the corresponding normal dpi services works just fine
# m.add_wms.Austria.AT_basemap.add_layer.geolandbasemap()
Any help with this is highly appreciated!
m.read_data
, m.from_file
and m.new_layer_from_file
convert values to float...
currently, if a dataset with "nan" in the coordinates is attempted to be plotted, the kernel is interrupted!
("nan" in the data with valid coordinates is fine)
There is an unnecessary print()
statement in the default picker for GeoDataFrames...
I drew my custom country map over the default map controlling zorder. But my custom country also overlapped my data.
I can't find zorder option of "set_data" and "set_shape" in EOmaps.
m.new_layer_from_file.GeoTIFF
m.new_layer_from_file.NetCDF
m.new_layer_from_file.CSV
Maps.from_file....
from_hdf
, from_zarr
, etc.?)Add support to draw geometries obtained from WebFeatureServices
I don't have any experience with WFS yet but it would be nice to have...
m.add_wfs
function to draw WFS service layersm.add_wms
)functools.cache
was introduced in python 3.9
, so using it breaks support for python<=3.8 !
Sometimes images are not updated fast enough so that artefacts of animated artists remain after blitting...
nbbagg
, webagg
and ipympl
m.plot_map(vmin=..., vmax=...)
does not yet convert values to actual data-values if encoded data (e.g. set with m.set_data(... encoding={...})
) is plotted!
TODO:
vmin_data = encoding["add_offset"] + encoding["scale_factor"] * vmin
)the documentation always needs improvements... suggestions are welcome!
currently the layer-selector shows only layers with features...
but if it just inherits features from the "all" layer it should be shown (e.g. callback-only layers)
hi Raphael,
trying the example Data-classification and multiple Maps in one figure w/ a pristine 2.1.1 and replacing the line
mg.m_0_0.set_data_specs(data=data, xcoord="lon", ycoord="lat", in_crs=4326)
w/
mg[0, 0].set_data_specs(data=data, xcoord="lon", ycoord="lat", in_crs=4326)
which i assume should work, instead raises...
Traceback (most recent call last):
File "/opt/ws-py/eomaps2/test_grid.py", line 15, in <module>
mg[0, 0].set_data_specs(data=data, xcoord="lon", ycoord="lat", in_crs=4326)
File "/opt/ws-py/eomaps2/.env/lib/python3.10/site-packages/eomaps/eomaps.py", line 2042, in __getitem__
return getattr(self, f"ax_{key[0]}_{key[1]}")
AttributeError: 'MapsGrid' object has no attribute 'ax_0_0'. Did you mean: 'm_0_0'?
replacing ax
w/ m
in line 2042 in eomaps.py
seems to solve the problem.
also noticed that ax_...
is still mentioned in the MapsGrid
class documentation.
At the moment the companion-widget is untested!
Hello again.
Thank you very much for your work developing EOmaps. I wish for the prosperity of EOmaps.
I have a question for the options of "m.set_shape.". Currently, "m.set_shape." has no option for geodesic rectangular. Is geodesic rectangular possible for a option of "m.set_shape." ?
In my field, unit of collecting data is a 1km or 2km rectangular region of the country. So I have data of which columns are (lon, lat) of the rectangular center and measurement value on the rectangular. Currently, I can only rely on "m.set_shape.geod_circles(radius)". This gives me a enough good visualization, but there is a regret that I want it to be a rectangle.
Instead of warning about missing geopandas
installation on import, only warn
when relevant functions are called.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.