Giter Club home page Giter Club logo

eomaps's People

Contributors

akgerber avatar banesullivan avatar domagojhack avatar edwardbetts avatar maxhollmann avatar raphaelquast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

eomaps's Issues

zorder of "set_data" and "set_shape"

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.

support for high-dpi WebMap services

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?)

EOmaps/eomaps/_webmap.py

Lines 1193 to 1197 in 76a1ef0

located_images = self.raster_source.fetch_raster(
ax.projection,
extent=[x1, x2, y1, y2],
target_resolution=(window_extent.width, window_extent.height),
)

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!

improve documentation

the documentation always needs improvements... suggestions are welcome!

  • add (or improve) examples
  • make sure all functionalities are well documented
  • create nice images (add a showcase page to show nice maps incl. source code?)

improve companion-widget

  • QT code
    • is it QT6 compatible? (if not... make it QT6 compatible)
    • general improvements
  • interface to plot from files
    • avoid opening/reading files multiple times
    • create a better overview text for dataset previews
  • user interface
    • make it more usable (and improve design)

Can I obtain the fixed map figure on the jupyter notebook? noninteracitve map.

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 ??

add a North-Arrow

... a feature request that occasionally pops up...

  • the idea would be to have a (draggable) arrow pointing north

Address pyproj.geod UserWarnings

...\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(

correctly treat colorbar extension arrows

  • for now, we use extend="neither" in the colorbar to allow sharing the axes-limits between ax_cb and ax_cb_plot
  • according to the doc 5% of the colorbar range is used as margin for the extension arrows by default

properly incorporate the extend-fraction in the limits of the histogram axes on top of the colorbar

MapsGrid.__getitem(...) references 'ax_...' and not 'm_...'

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.

vmin and vmax should recognize data-encoding!

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:

  • add conversion for values provided as vmin/vmax
    (vmin_data = encoding["add_offset"] + encoding["scale_factor"] * vmin)

Combine EOmaps with streamlit?

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.

problems installing eomaps on Linux via pip

hi there,

  1. trying to run the following code using the module:
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.

  1. running the code (a) terminates w/ no exception or stack trace, but (b) no map/plot window is shown.

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:

  • Fedora 35, running GNU/Linux 5.15.6-200.fc35.x86_64
  • Python 3.10.0

are these known problems, issues related to my environment, or something(s) i missed in installing and using the module?

TIA + cheers;

improve handling of dependencies [installation / conda]

  • 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.)

improve drawer

  • add more shapes for drawing
  • add support to draw a shape with text inside
  • make polygons editable
    • pick polygons to select them
    • drag vertices to edit drawn polygons
    • move/rotate whole polygon
    • change color, linewidth etc.

datashader library could not be imported

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.

Solution:

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.

Is geodesic rectangular possible for a option of "m.set_shape." ?

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.

properly handle encoded data

  • at the moment m.read_data, m.from_file and m.new_layer_from_file convert values to float...
    • this is problematic for extremely large datasets stored as integers!
  • handle encoding of GeoTIFFS and NetCDF's accordingly
  • allow providing custom encodings

m.ax.add_geometries is not working

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.

issue with m.add_feature and reprojections

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')

GeoPandas legends are not properly handled

At the moment, legends added by m.add_gdf are not properly handled.

  • colorbars are not layer-sensitive
from eomaps import Maps
m = Maps()
gdf = m.add_feature.cultural.admin_0_countries.get_gdf()
m.add_gdf(gdf, legend=True, column="scalerank")
  • legends do not show up at all
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")

Temporary fix:

# 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)

wxpython embedding?

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.

save figure prompt closes immediately on linux

  1. when clicking on "save" in the widget, the window to select the path appears for a short moment and then disappears
  2. widget and open maps/figures are in suspense until console is closed (spyder editor, linux )

data with "nan" in coordinates can't be plotted ("nan" in data-values is fine!)

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)

TODO

  • check if all coordinates are valid
  • mask for invalid coordinates prior to plotting (or at least issue a warning)

check

  • check what part of the code can't deal with nan's as coordinates and how to deal with this efficiently
  • avoid that this becomes a performance-issue for very large datasets!

Improve and enhance file-plotting API

  • unify syntax for
    • m.new_layer_from_file.GeoTIFF
    • m.new_layer_from_file.NetCDF
    • m.new_layer_from_file.CSV
    • ... and similarly for Maps.from_file....
  • [maybe] detect file-type by file-ending and avoid explicit functions for each filetype?
    • is this feasible/useful or does it cause problems/confusion ?
  • add more filetypes (from_hdf, from_zarr, etc.?)

add support for WebFeatureService

Add support to draw geometries obtained from WebFeatureServices

I don't have any experience with WFS yet but it would be nice to have...

  • collect a list of open-access WFS services
  • add a m.add_wfs function to draw WFS service layers
  • add dot-access functionality of pre-defined services (similar to m.add_wms)
  • [maybe] add direct support to make geometries pickable?

using `raster` shape with irregularly spaced coordinates causes problems

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()

raster_issue

Temporary workaround:

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)
...

Import error : cannot import name 'TriMesh' from 'matplotlib.tri'

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)

My conda list:

packages in environment at C:\Users\user\anaconda3\envs\specavail1:

Note: you may need to restart the kernel to use updated packages.

Name Version Build Channel

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

"frameon" kwarg not working as expected

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")

using bbox_inches='tight' with `m.savefig` results in a blank export

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.