Reading groundwater observations

This notebook introduces how to use the hydropandas package to read, process and visualise groundwater data from Dino and Bro databases.

Notebook contents

  1. GroundwaterObs

  2. ObsCollections

  3. Read ObsCollections

[1]:
import contextily as ctx
from IPython.display import HTML

import hydropandas as hpd
[2]:
hpd.util.get_color_logger("INFO")
[2]:
<RootLogger root (INFO)>

GroundwaterObs

The hydropandas package has several functions to read groundwater observations at a measurement well. These include reading data from:

  • dino (from csv-files).

  • bro (using the bro-api)

  • fews (xml dumps from the fews database)

  • wiski (dumps from the wiski database)

[3]:
# reading a dino csv file
path = "data/Grondwaterstanden_Put/B33F0080001_1.csv"
gw_dino = hpd.GroundwaterObs.from_dino(path=path)
gw_dino
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> B33F0080001_1
[3]:

hydropandas.GroundwaterObs

B33F0080-001
crs EPSG:28992
location B33F0080
source dino
tube_top 7.18
tube_nr 1.0
x 213260.0
unit m NAP
ground_level 6.92
filename B33F0080001_1
screen_bottom 2.85
y 473900.0
screen_top 3.85

stand_m_tov_nap locatie filternummer stand_cm_tov_mp stand_cm_tov_mv stand_cm_tov_nap bijzonderheid opmerking tube_top ground_level
peildatum
1972-11-28 5.76 B33F0080 1 141 109 576 NaN NaN 7.17 6.85
1972-12-07 5.77 B33F0080 1 140 108 577 NaN NaN 7.17 6.85
1972-12-14 5.70 B33F0080 1 147 115 570 NaN NaN 7.17 6.85
1972-12-21 5.64 B33F0080 1 153 121 564 NaN NaN 7.17 6.85
1972-12-28 5.57 B33F0080 1 160 128 557 NaN NaN 7.17 6.85
... ... ... ... ... ... ... ... ... ... ...
2015-06-13 5.42 B33F0080 1 176 150 542 NaN NaN 7.18 6.92
2015-06-14 5.42 B33F0080 1 176 150 542 NaN NaN 7.18 6.92
2015-06-15 5.40 B33F0080 1 178 152 540 NaN NaN 7.18 6.92
2015-06-16 5.40 B33F0080 1 178 152 540 NaN NaN 7.18 6.92
2015-06-17 5.40 B33F0080 1 178 152 540 NaN NaN 7.18 6.92

3988 rows × 10 columns

[4]:
# reading the same filter from using the bro api. Specify a groundwater monitoring id (GMW00...) and a filter number (1)
gw_bro = hpd.GroundwaterObs.from_bro("GMW000000041261", 1)

Now we have an GroundwaterObs object named gw_bro and gw_dino. Both objects are from the same measurement well in different databases. A GroundwaterObs object inherits from a pandas DataFrame and has the same attributes and methods.

[5]:
gw_bro.describe()
[5]:
values
count 66411.000000
mean 5.562630
std 0.222262
min 4.913000
25% 5.380000
50% 5.569000
75% 5.721000
max 6.397000
[6]:
gw_bro
[6]:

hydropandas.GroundwaterObs

GMW000000041261_1
crs EPSG:28992
location GMW000000041261
source BRO
tube_top 7.173
tube_nr 1
x 213268.0
unit m NAP
ground_level 6.9
filename
screen_bottom 3.05
y 473910.0
screen_top 4.05

values qualifier
1972-11-28 00:00:00 5.763 goedgekeurd
1972-12-07 00:00:00 5.773 goedgekeurd
1972-12-14 00:00:00 5.703 goedgekeurd
1972-12-21 00:00:00 5.643 goedgekeurd
1972-12-28 00:00:00 5.573 goedgekeurd
... ... ...
2021-10-08 07:00:00 5.486 goedgekeurd
2021-10-08 08:00:00 5.485 goedgekeurd
2021-10-08 09:00:00 5.486 goedgekeurd
2021-10-08 09:47:00 5.491 goedgekeurd
2021-10-08 10:00:00 5.485 goedgekeurd

66411 rows × 2 columns

[7]:
ax = gw_dino["stand_m_tov_nap"].plot(
    label="dinoloket", figsize=(14, 5), legend=True, marker=".", lw=0.2
)
gw_bro["values"].plot(ax=ax, label="bro", legend=True, ylabel=gw_bro.unit)
gw_dino["ground_level"].plot(
    ax=ax,
    label="ground level",
    legend=True,
    grid=True,
    color="green",
    ylabel=gw_dino.unit,
)

ax.set_title(f"same tube from Dinoloket {gw_dino.name} and BRO id {gw_bro.name}")
[7]:
Text(0.5, 1.0, 'same tube from Dinoloket B33F0080-001 and BRO id GMW000000041261_1')
../_images/examples_01_groundwater_observations_10_1.png

GroundwaterObs Attributes

Besides the standard DataFrame attributes a GroundwaterObs has the following additional attributes:

  • x, y: x- and y-coordinates of the observation point

  • name: str with the name

  • filename: str with the filename (only available when the data was loaded from a file)

  • location: the name of the location, typically a monitoring_well. One location can have multiple tubes with a different tube number.

  • tube_nr: the number of the tube. The combination of location and tube_nr should be unique

  • screen_top: the top of the tube screen (bovenkant filter in Dutch)

  • screen_bottom: the bottom of the tube screen (onderkant filter in Dutch)

  • ground_level: surface level (maaiveld in Dutch)

  • tube_top: the top of the tube

  • meta: dictionary with additional metadata

When dowloading from Dinoloket all levels are in meters NAP.

[8]:
print(gw_bro)
GroundwaterObs GMW000000041261_1
-----metadata------
crs : EPSG:28992
location : GMW000000041261
source : BRO
tube_top : 7.173
tube_nr : 1
x : 213268.0
unit : m NAP
ground_level : 6.9
filename :
screen_bottom : 3.05
name : GMW000000041261_1
y : 473910.0
screen_top : 4.05

-----time series------
                     values    qualifier
1972-11-28 00:00:00   5.763  goedgekeurd
1972-12-07 00:00:00   5.773  goedgekeurd
1972-12-14 00:00:00   5.703  goedgekeurd
1972-12-21 00:00:00   5.643  goedgekeurd
1972-12-28 00:00:00   5.573  goedgekeurd
...                     ...          ...
2021-10-08 07:00:00   5.486  goedgekeurd
2021-10-08 08:00:00   5.485  goedgekeurd
2021-10-08 09:00:00   5.486  goedgekeurd
2021-10-08 09:47:00   5.491  goedgekeurd
2021-10-08 10:00:00   5.485  goedgekeurd

[66411 rows x 2 columns]

GroundwaterObs methods

Besides the standard DataFrame methods a GroundwaterObs has additional methods. This methods are accessible through submodules:

  • geo.get_lat_lon(), to obtain latitude and longitude

  • gwobs.get_modellayer(), to obtain the modellayer of a modflow model using the filter depth

  • stats.get_seasonal_stat(), to obtain seasonal statistics

  • stats.obs_per_year(), to obtain the number of observations per year

  • stats.consecutive_obs_years(), to obtain the number of consecutive years with more than a minimum number of observations

  • plots.interactive_plot(), to obtain a bokeh plot

Get latitude and longitude with gw.geo.get_lat_lon():

[9]:
print(f"latitude and longitude -> {gw_bro.geo.get_lat_lon()}")
latitude and longitude -> (52.250147067381974, 6.240479945291209)
[10]:
gw_bro.stats.get_seasonal_stat(stat="mean")
[10]:
winter_mean summer_mean
GMW000000041261_1 5.723791 5.40682
[11]:
p = gw_bro.plots.interactive_plot("figure")
HTML(filename=f"figure/{gw_bro.name}.html")
[11]:
GMW000000041261_1

ObsCollections

ObsCollections are a combination of multiple observation objects. The easiest way to construct an ObsCollections is from a list of observation objects.

[12]:
path1 = "data/Grondwaterstanden_Put/B33F0080001_1.csv"
path2 = "data/Grondwaterstanden_Put/B33F0133001_1.csv"
gw1 = hpd.GroundwaterObs.from_dino(path=path1)
gw2 = hpd.GroundwaterObs.from_dino(path=path2)

# create ObsCollection
oc = hpd.ObsCollection([gw1, gw2], name="Dino groundwater")
oc
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> B33F0080001_1
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> B33F0133001_1
[12]:
location source tube_top tube_nr x unit ground_level filename screen_bottom y screen_top obs
name
B33F0080-001 B33F0080 dino 7.18 1.0 213260.0 m NAP 6.92 B33F0080001_1 2.85 473900.0 3.85 GroundwaterObs B33F0080-001 -----metadata-----...
B33F0133-001 B33F0133 dino 7.14 1.0 210400.0 m NAP 6.50 B33F0133001_1 -70.00 473366.0 -67.50 GroundwaterObs B33F0133-001 -----metadata-----...

Now we have an ObsCollection object named oc. The ObsCollection contains all the data from the two GroundwaterObs objects. It also stores a reference to the GroundwaterObs objects in the ‘obs’ column. An ObsCollection object also inherits from a pandas DataFrame and has the same attributes and methods.

[13]:
# get columns
oc.columns
[13]:
Index(['location', 'source', 'tube_top', 'tube_nr', 'x', 'unit',
       'ground_level', 'filename', 'screen_bottom', 'y', 'screen_top', 'obs'],
      dtype='str')
[14]:
# get individual GroundwaterObs object from an ObsCollection
o = oc.loc["B33F0133-001", "obs"]
o
[14]:

hydropandas.GroundwaterObs

B33F0133-001
crs EPSG:28992
location B33F0133
source dino
tube_top 7.14
tube_nr 1.0
x 210400.0
unit m NAP
ground_level 6.5
filename B33F0133001_1
screen_bottom -70.0
y 473366.0
screen_top -67.5

stand_m_tov_nap locatie filternummer stand_cm_tov_mp stand_cm_tov_mv stand_cm_tov_nap bijzonderheid opmerking tube_top
peildatum
1989-12-14 1.20 B33F0133 1 582.0 530.0 120.0 NaN NaN 7.02
1990-01-15 1.57 B33F0133 1 545.0 493.0 157.0 NaN NaN 7.02
1990-01-29 1.70 B33F0133 1 532.0 480.0 170.0 NaN NaN 7.02
1990-02-14 1.53 B33F0133 1 549.0 497.0 153.0 NaN NaN 7.02
1990-03-01 1.56 B33F0133 1 546.0 494.0 156.0 NaN NaN 7.02
... ... ... ... ... ... ... ... ... ...
2011-01-14 3.57 B33F0133 1 357.0 293.0 357.0 NaN NaN 7.14
2011-01-15 3.60 B33F0133 1 354.0 290.0 360.0 NaN NaN 7.14
2011-01-16 3.61 B33F0133 1 353.0 289.0 361.0 NaN NaN 7.14
2011-01-17 3.61 B33F0133 1 353.0 289.0 361.0 NaN NaN 7.14
2011-01-18 3.63 B33F0133 1 351.0 287.0 363.0 NaN NaN 7.14

2212 rows × 9 columns

[15]:
# get statistics
oc.describe()
[15]:
tube_top tube_nr x ground_level screen_bottom y screen_top
count 2.000000 2.0 2.000000 2.000000 2.000000 2.000000 2.000000
mean 7.160000 1.0 211830.000000 6.710000 -33.575000 473633.000000 -31.825000
std 0.028284 0.0 2022.325394 0.296985 51.512729 377.595021 50.452069
min 7.140000 1.0 210400.000000 6.500000 -70.000000 473366.000000 -67.500000
25% 7.150000 1.0 211115.000000 6.605000 -51.787500 473499.500000 -49.662500
50% 7.160000 1.0 211830.000000 6.710000 -33.575000 473633.000000 -31.825000
75% 7.170000 1.0 212545.000000 6.815000 -15.362500 473766.500000 -13.987500
max 7.180000 1.0 213260.000000 6.920000 2.850000 473900.000000 3.850000

ObsCollection methods

Besides the methods of a pandas DataFrame an ObsCollection has additional methods stored in submodules.

geo:

  • get_bounding_box -> get a tuple with (xmin, ymin, xmax, ymax)

  • get_extent -> get a tule with (xmin, xmax, ymin, ymax)

  • get_lat_lon -> to get the lattitudes and longitudes from the x and y coordinates

  • within_polygon -> to select only the observations that lie within a polygon

gwobs:

  • set_tube_nr -> to set the tube numbers based on the tube screen depth when there are multiple tubes at one location

  • set_tube_nr_location -> find out which observations are at the same location with a different screen depth. Set location and tube_nr attributes accordingly.

plots:

  • interactive_figures -> create bokeh figures for each observation point.

  • interactive_map -> create a folium map with observation points and bokeh figures for each observation point.

  • section_plot -> create a plot of multiple observations and a plot of the well layout.

stats:

  • get_first_last_obs_date() -> get the first and the last date of the observations for each observation point

  • get_no_of_observations() -> get the number of observations

  • get_seasonal_stat() -> get seasonal stats of the observations

E.g. get the bounding box with gw.geo.get_bounding_box():

[16]:
print(f"bounding box -> {oc.geo.get_bounding_box()}")
bounding box -> (np.float64(210400.0), np.float64(473366.0), np.float64(213260.0), np.float64(473900.0))
[17]:
oc.geo.set_lat_lon()
oc.plots.interactive_map(plot_dir="figure", popup_width=300)
[17]:
Make this Notebook Trusted to load map: File -> Trust Notebook

We can get an overview of the well layout and observations via plots.section_plot:

[18]:
oc.plots.section_plot()
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> B33F0080-001
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> B33F0133-001
[18]:
(<Figure size 1500x500 with 2 Axes>,
 [<Axes: ylabel='m NAP'>, <Axes: ylabel='m NAP'>])
../_images/examples_01_groundwater_observations_29_2.png

ObsCollection Attributes

An ObsCollection also has additional attributes:

  • name, a str with the name of the collection

  • meta, a dictionary with additional metadata

[19]:
print(f"name is -> {oc.name}")
print(f"meta is -> {oc.meta}")
name is -> Dino groundwater
meta is -> {}

Read ObsCollections

Instead of creating the ObsCollection from a list of observation objects. It is also possible to read the data from a source into an ObsCollection at once. The following sources can be read as an ObsCollection:

  • bro (using the api)

  • dino (from files)

  • fews (dumps from the fews database)

  • wiski (dumps from the wiski database)

  • menyanthes (a .men file)

  • modflow (from the heads of a modflow model)

  • imod (from the heads of an imod model)

This notebook won’t go into detail on all the sources that can be read. Only the two options for reading data from Dino and BRO are shown below.

[20]:
# read using a .zip file with data
dinozip = "data/dino.zip"
dino_gw = hpd.read_dino(
    dirname=dinozip, subdir="Grondwaterstanden_Put", suffix="1.csv", keep_all_obs=False
)
dino_gw
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B02H0092001_1.csv
WARNING:hydropandas.io.dino.read_dino_groundwater_csv:no NAP measurements available -> Grondwaterstanden_Put/B02H0092001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B02H1007001_1.csv
WARNING:hydropandas.io.dino.read_dino_groundwater_csv:no NAP measurements available -> Grondwaterstanden_Put/B02H1007001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B04D0032002_1.csv
WARNING:hydropandas.io.dino._read_dino_groundwater_metadata:could not read metadata -> Grondwaterstanden_Put/B04D0032002_1.csv
WARNING:hydropandas.io.dino.read_dino_groundwater_csv:no NAP measurements available -> Grondwaterstanden_Put/B04D0032002_1.csv
INFO:hydropandas.io.dino.get_dino_obs:not added to collection -> Grondwaterstanden_Put/B04D0032002_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B27D0260001_1.csv
WARNING:hydropandas.io.dino._read_dino_groundwater_metadata:could not read metadata -> Grondwaterstanden_Put/B27D0260001_1.csv
WARNING:hydropandas.io.dino.read_dino_groundwater_csv:no NAP measurements available -> Grondwaterstanden_Put/B27D0260001_1.csv
INFO:hydropandas.io.dino.get_dino_obs:not added to collection -> Grondwaterstanden_Put/B27D0260001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B33F0080001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B33F0080002_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B33F0133001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B33F0133002_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B37A0112001_1.csv
WARNING:hydropandas.io.dino._read_dino_groundwater_metadata:could not read metadata -> Grondwaterstanden_Put/B37A0112001_1.csv
WARNING:hydropandas.io.dino.read_dino_groundwater_csv:could not read measurements -> Grondwaterstanden_Put/B37A0112001_1.csv
INFO:hydropandas.io.dino.get_dino_obs:not added to collection -> Grondwaterstanden_Put/B37A0112001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B42B0003001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B42B0003002_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B42B0003003_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B42B0003004_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B58A0092004_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B58A0092005_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B58A0102001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B58A0167001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B58A0212001_1.csv
INFO:hydropandas.io.dino.read_dino_groundwater_csv:reading -> Grondwaterstanden_Put/B22D0155001_1.csv
[20]:
location source tube_top tube_nr x unit ground_level filename screen_bottom y screen_top obs
name
B02H0092-001 B02H0092 dino NaN 1.0 219890.0 m NAP NaN Grondwaterstanden_Put/B02H0092001_1.csv NaN 600030.0 NaN GroundwaterObs B02H0092-001 -----metadata-----...
B02H1007-001 B02H1007 dino NaN 1.0 219661.0 m NAP 1.92 Grondwaterstanden_Put/B02H1007001_1.csv NaN 600632.0 NaN GroundwaterObs B02H1007-001 -----metadata-----...
B33F0080-001 B33F0080 dino 7.18 1.0 213260.0 m NAP 6.92 Grondwaterstanden_Put/B33F0080001_1.csv 2.85 473900.0 3.85 GroundwaterObs B33F0080-001 -----metadata-----...
B33F0080-002 B33F0080 dino 7.17 2.0 213260.0 m NAP 6.92 Grondwaterstanden_Put/B33F0080002_1.csv -12.15 473900.0 -10.15 GroundwaterObs B33F0080-002 -----metadata-----...
B33F0133-001 B33F0133 dino 7.14 1.0 210400.0 m NAP 6.50 Grondwaterstanden_Put/B33F0133001_1.csv -70.00 473366.0 -67.50 GroundwaterObs B33F0133-001 -----metadata-----...
B33F0133-002 B33F0133 dino 7.12 2.0 210400.0 m NAP 6.50 Grondwaterstanden_Put/B33F0133002_1.csv -106.20 473366.0 -104.20 GroundwaterObs B33F0133-002 -----metadata-----...
B42B0003-001 B42B0003 dino 6.99 1.0 38165.0 m NAP 6.50 Grondwaterstanden_Put/B42B0003001_1.csv -3.00 413785.0 -2.00 GroundwaterObs B42B0003-001 -----metadata-----...
B42B0003-002 B42B0003 dino 6.99 2.0 38165.0 m NAP 6.50 Grondwaterstanden_Put/B42B0003002_1.csv -35.00 413785.0 -34.00 GroundwaterObs B42B0003-002 -----metadata-----...
B42B0003-003 B42B0003 dino 6.95 3.0 38165.0 m NAP 6.50 Grondwaterstanden_Put/B42B0003003_1.csv -61.00 413785.0 -60.00 GroundwaterObs B42B0003-003 -----metadata-----...
B42B0003-004 B42B0003 dino 6.97 4.0 38165.0 m NAP 6.50 Grondwaterstanden_Put/B42B0003004_1.csv -108.00 413785.0 -107.00 GroundwaterObs B42B0003-004 -----metadata-----...
B58A0092-004 B58A0092 dino 29.61 4.0 186924.0 m NAP 29.85 Grondwaterstanden_Put/B58A0092004_1.csv -117.23 372026.0 -115.23 GroundwaterObs B58A0092-004 -----metadata-----...
B58A0092-005 B58A0092 dino 29.62 5.0 186924.0 m NAP 29.84 Grondwaterstanden_Put/B58A0092005_1.csv -137.23 372026.0 -134.23 GroundwaterObs B58A0092-005 -----metadata-----...
B58A0102-001 B58A0102 dino 29.73 1.0 187900.0 m NAP 29.65 Grondwaterstanden_Put/B58A0102001_1.csv -8.35 373025.0 -3.35 GroundwaterObs B58A0102-001 -----metadata-----...
B58A0167-001 B58A0167 dino 30.21 1.0 185745.0 m NAP 30.50 Grondwaterstanden_Put/B58A0167001_1.csv 22.33 371095.0 23.33 GroundwaterObs B58A0167-001 -----metadata-----...
B58A0212-001 B58A0212 dino 28.53 1.0 183600.0 m NAP 28.49 Grondwaterstanden_Put/B58A0212001_1.csv 25.53 373020.0 26.03 GroundwaterObs B58A0212-001 -----metadata-----...
B22D0155-001 B22D0155 dino 9.94 1.0 233830.0 m NAP 8.91 Grondwaterstanden_Put/B22D0155001_1.csv 6.80 502530.0 7.80 GroundwaterObs B22D0155-001 -----metadata-----...
[21]:
# read from bro using an extent (Schoonhoven zuid-west)
oc = hpd.read_bro(extent=(117850, 118180, 439550, 439900), keep_all_obs=False)
oc
100%|██████████| 5/5 [00:23<00:00,  4.76s/it]
[21]:
location source tube_top tube_nr x unit ground_level filename screen_bottom y screen_top obs
name
GMW000000036319_1 GMW000000036319 BRO -0.621 1 117957.010 m NAP -0.501 -2.721 439698.236 -1.721 GroundwaterObs GMW000000036319_1 -----metadata...
GMW000000036327_1 GMW000000036327 BRO 0.716 1 118064.196 m NAP 0.856 -1.833 439799.968 -0.833 GroundwaterObs GMW000000036327_1 -----metadata...
GMW000000036365_1 GMW000000036365 BRO 1.221 1 118127.470 m NAP 1.371 -1.428 439683.136 -0.429 GroundwaterObs GMW000000036365_1 -----metadata...
GMW000000049567_1 GMW000000049567 BRO -0.150 1 117892.600 m NAP 0.010 -2.950 439651.900 -1.950 GroundwaterObs GMW000000049567_1 -----metadata...
GMW000000049567_2 GMW000000049567 BRO -0.250 2 117892.600 m NAP 0.010 -15.000 439651.900 -14.000 GroundwaterObs GMW000000049567_2 -----metadata...
[22]:
# plot wells, use x-coordinate in section plot
oc.plots.section_plot(section_colname_x="x", section_label_x="x coordinate [m]")
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> GMW000000036319_1
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> GMW000000036327_1
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> GMW000000036365_1
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> GMW000000049567_1
INFO:hydropandas.extensions.plots.section_plot:created sectionplot -> GMW000000049567_2
[22]:
(<Figure size 1500x500 with 2 Axes>,
 [<Axes: xlabel='x coordinate [m]', ylabel='m NAP'>, <Axes: ylabel='m NAP'>])
../_images/examples_01_groundwater_observations_36_2.png
[23]:
ax = oc.to_gdf().plot()
ctx.add_basemap(ax=ax, crs=oc.crs)
../_images/examples_01_groundwater_observations_37_0.png