ECOv002-calval-tables 1.5.0__tar.gz → 1.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/ECOv002_calval_tables.py +1 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/load_tables.py +4 -0
- ecov002_calval_tables-1.7.1/ECOv002_calval_tables/plot_single_model.py +114 -0
- ecov002_calval_tables-1.7.1/ECOv002_calval_tables/upscale_to_daylight.py +18 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/PKG-INFO +2 -1
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/SOURCES.txt +1 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/requires.txt +1 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/top_level.txt +2 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/PKG-INFO +2 -1
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/pyproject.toml +5 -1
- ecov002_calval_tables-1.5.0/ECOv002_calval_tables/plot_single_model.py +0 -69
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/__init__.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/combined_eco_flux_EC_filtered.csv +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/ec_lib.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/error_funcs.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/metadata_ebc_filt.csv +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/plot_funcs.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/version.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/dependency_links.txt +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/LICENSE +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/README.md +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/setup.cfg +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_import_ECOv002_calval_tables.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_import_dependencies.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_load_calval_table.py +0 -0
- {ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_load_metadata_ebc_filt.py +0 -0
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/load_tables.py
RENAMED
|
@@ -6,6 +6,8 @@ import geopandas as gpd
|
|
|
6
6
|
|
|
7
7
|
from shapely.geometry import Point
|
|
8
8
|
|
|
9
|
+
from .upscale_to_daylight import upscale_to_daylight
|
|
10
|
+
|
|
9
11
|
def load_combined_eco_flux_ec_filtered() -> pd.DataFrame:
|
|
10
12
|
"""
|
|
11
13
|
Load the filtered eddy covariance (EC) flux dataset used for ECOSTRESS Collection 2 ET product validation.
|
|
@@ -64,4 +66,6 @@ def load_calval_table() -> gpd.GeoDataFrame:
|
|
|
64
66
|
# Convert merged DataFrame to GeoDataFrame
|
|
65
67
|
gdf = gpd.GeoDataFrame(merged_df, geometry=merged_df["geometry"], crs="EPSG:4326")
|
|
66
68
|
|
|
69
|
+
gdf = upscale_to_daylight(gdf)
|
|
70
|
+
|
|
67
71
|
return gdf
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
|
|
2
|
+
import matplotlib.pyplot as plt
|
|
3
|
+
import numpy as np
|
|
4
|
+
import matplotlib.lines as mlines
|
|
5
|
+
import os
|
|
6
|
+
from . import error_funcs
|
|
7
|
+
|
|
8
|
+
import pandas as pd
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
11
|
+
def quick_look_plot_single_model(
|
|
12
|
+
calval_table_df: pd.DataFrame,
|
|
13
|
+
model_output_variable_name: str,
|
|
14
|
+
model_name: str,
|
|
15
|
+
insitu_variable_name: str = 'LEcorr50'
|
|
16
|
+
) -> plt.Figure:
|
|
17
|
+
"""
|
|
18
|
+
Generate a scatter plot comparing model output to flux tower latent energy (LE) measurements, color-coded by vegetation type, with error bars and annotated performance metrics.
|
|
19
|
+
|
|
20
|
+
This function is designed for visual evaluation of model performance against observed data, and is suitable for use in Jupyter notebooks (returns a matplotlib Figure object for direct display).
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
calval_table_df : pd.DataFrame
|
|
25
|
+
DataFrame containing all relevant data for plotting and analysis. Must include columns for vegetation type, model output, flux tower LE, and optionally uncertainty/error columns.
|
|
26
|
+
model_output_variable_name : str
|
|
27
|
+
Column name in `calval_table_df` for the model output to be plotted on the y-axis.
|
|
28
|
+
model_name : str
|
|
29
|
+
Display name for the model, used as the plot title.
|
|
30
|
+
insitu_variable_name : str, optional
|
|
31
|
+
Column name for the flux tower LE values to be plotted on the x-axis (default is 'LEcorr50').
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
matplotlib.figure.Figure
|
|
36
|
+
The generated matplotlib Figure object, ready for display in a Jupyter notebook or further customization.
|
|
37
|
+
|
|
38
|
+
Notes
|
|
39
|
+
-----
|
|
40
|
+
- Points are color-coded by vegetation type using a predefined color map.
|
|
41
|
+
- Error bars are included if uncertainty columns are present in the DataFrame.
|
|
42
|
+
- The plot includes a 1:1 reference line, a regression line, and annotations for RMSE, bias, and R².
|
|
43
|
+
- A legend for vegetation types is included below the plot.
|
|
44
|
+
|
|
45
|
+
Example
|
|
46
|
+
-------
|
|
47
|
+
>>> fig = quick_look_plot_single_model(df, 'model_output', 'My Model')
|
|
48
|
+
>>> fig.show()
|
|
49
|
+
"""
|
|
50
|
+
# Define colors for each vegetation type for scatter plot visualization
|
|
51
|
+
colors = {
|
|
52
|
+
'CRO': '#FFEC8B', 'CSH': '#AB82FF', 'CVM': '#8B814C',
|
|
53
|
+
'DBF': '#98FB98', 'EBF': '#7FFF00', 'ENF': '#006400',
|
|
54
|
+
'GRA': '#FFA54F', 'MF': '#8FBC8F', 'OSH': '#FFE4E1',
|
|
55
|
+
'SAV': '#FFD700', 'WAT': '#98F5FF', 'WET': '#4169E1',
|
|
56
|
+
'WSA': '#CDAA7D'
|
|
57
|
+
}
|
|
58
|
+
# Assign a color to each data point based on its vegetation type
|
|
59
|
+
scatter_colors = [colors.get(veg, 'gray') for veg in calval_table_df['vegetation']]
|
|
60
|
+
# Create a reference 1:1 line for the plot (where model output equals flux tower measurement)
|
|
61
|
+
one2one = np.arange(-250, 1200, 5)
|
|
62
|
+
# Helper function to calculate performance metrics between model and observed data
|
|
63
|
+
def calculate_metrics(x: np.ndarray, y: np.ndarray) -> tuple[float, float, float, float, float]:
|
|
64
|
+
# RMSE: Root Mean Square Error
|
|
65
|
+
rmse = error_funcs.rmse(y, x)
|
|
66
|
+
# R2: Coefficient of Determination
|
|
67
|
+
r2 = error_funcs.R2_fun(y, x)
|
|
68
|
+
# Slope and intercept from linear regression
|
|
69
|
+
slope, intercept = error_funcs.lin_regress(y, x)
|
|
70
|
+
# Bias: Mean difference between model and observed
|
|
71
|
+
bias = error_funcs.BIAS_fun(y,x)
|
|
72
|
+
return rmse, r2, slope, intercept, bias
|
|
73
|
+
# Extract flux tower LE values and model output values from DataFrame
|
|
74
|
+
x = calval_table_df[insitu_variable_name].to_numpy()
|
|
75
|
+
y = calval_table_df[model_output_variable_name].to_numpy()
|
|
76
|
+
# Extract uncertainty in model output if available
|
|
77
|
+
err = calval_table_df['ETinstUncertainty'].to_numpy() if 'ETinstUncertainty' in calval_table_df.columns else None
|
|
78
|
+
# Calculate standard deviation across three LE columns for x error bars if all columns are present
|
|
79
|
+
xerr = calval_table_df[['LE_filt', 'LEcorr50', 'LEcorr_ann']].std(axis=1).to_numpy() if all(col in calval_table_df.columns for col in ['LE_filt', 'LEcorr50', 'LEcorr_ann']) else None
|
|
80
|
+
# Compute performance metrics for the plot annotation
|
|
81
|
+
rmse, r2, slope, intercept, bias = calculate_metrics(x, y)
|
|
82
|
+
# Count number of valid (non-NaN) data points
|
|
83
|
+
number_of_points = np.sum(~np.isnan(y) & ~np.isnan(x))
|
|
84
|
+
# Create the matplotlib figure and axis
|
|
85
|
+
fig, ax = plt.subplots(figsize=(6, 6))
|
|
86
|
+
# Plot error bars if uncertainty data is available
|
|
87
|
+
if err is not None and xerr is not None:
|
|
88
|
+
ax.errorbar(x, y, yerr=err, xerr=xerr, fmt='', ecolor='lightgray')
|
|
89
|
+
# Plot the scatter points, colored by vegetation type
|
|
90
|
+
ax.scatter(x, y, c=scatter_colors, marker='o', s=6, zorder=4)
|
|
91
|
+
# Plot the 1:1 reference line (ideal fit)
|
|
92
|
+
ax.plot(one2one, one2one, '--', c='k')
|
|
93
|
+
# Plot the regression line (actual fit)
|
|
94
|
+
ax.plot(one2one, one2one * slope + intercept, '--', c='gray')
|
|
95
|
+
# Set plot title and axis limits
|
|
96
|
+
ax.set_title(model_name)
|
|
97
|
+
ax.set_xlim([-250, 1200])
|
|
98
|
+
ax.set_ylim([-250, 1200])
|
|
99
|
+
# Set axis labels
|
|
100
|
+
ax.set_ylabel('Model LE Wm$^{-2}$',fontsize=14)
|
|
101
|
+
ax.set_xlabel('Flux Tower LE Wm$^{-2}$',fontsize=14)
|
|
102
|
+
# Add subplot label
|
|
103
|
+
ax.text(-0.1, 1.1, 'a)', transform=ax.transAxes, fontsize=16, fontweight='bold', va='top', ha='right')
|
|
104
|
+
# Annotate plot with regression equation, RMSE, bias, and R2
|
|
105
|
+
ax.text(500, -200, f'y = {slope:.1f}x + {intercept:.1f} \nRMSE: {rmse:.1f} Wm$^-$² \nbias: {bias:.1f} Wm$^-$² \nR$^2$: {r2:.2f}', fontsize=12)
|
|
106
|
+
# Create legend handles for each vegetation type
|
|
107
|
+
scatter_handles = [mlines.Line2D([], [], color=color, marker='o', linestyle='None', markersize=6, label=veg) for veg, color in colors.items()]
|
|
108
|
+
# Add legend to the figure
|
|
109
|
+
fig.legend(handles=scatter_handles, loc='lower center', bbox_to_anchor=(0.5, -0.05), ncol=7, title='Vegetation Type',fontsize=10)
|
|
110
|
+
# Adjust layout for better appearance
|
|
111
|
+
fig.tight_layout()
|
|
112
|
+
# Prevent automatic display in Jupyter by closing the figure before returning
|
|
113
|
+
plt.close(fig)
|
|
114
|
+
return fig
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
from daylight_evapotranspiration import daylight_ET_from_instantaneous_LE
|
|
3
|
+
|
|
4
|
+
def upscale_to_daylight(df: pd.DataFrame, prefix: str = "insitu_") -> pd.DataFrame:
|
|
5
|
+
daylight_results = daylight_ET_from_instantaneous_LE(
|
|
6
|
+
LE_instantaneous_Wm2=df.LEcorr50,
|
|
7
|
+
Rn_instantaneous_Wm2=df.NETRAD_filt,
|
|
8
|
+
G_instantaneous_Wm2=df.G_filt,
|
|
9
|
+
time_UTC=df.time_UTC,
|
|
10
|
+
geometry=df.geometry
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
daylight_results_prefixed = {f"{prefix}{k}": v for k, v in daylight_results.items()}
|
|
14
|
+
|
|
15
|
+
for key, value in daylight_results_prefixed.items():
|
|
16
|
+
df[key] = value
|
|
17
|
+
|
|
18
|
+
return df
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ECOv002-calval-tables
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.1
|
|
4
4
|
Summary: Priestley-Taylor Jet Propulsion Laboratory Soil Moisutre Evapotranspiration Model
|
|
5
5
|
Author-email: Gregory Halverson <gregory.h.halverson@jpl.nasa.gov>, Zoe Pierrat <zoe.a.pierrat@jpl.nasa.gov>
|
|
6
6
|
Project-URL: Homepage, https://github.com/gregory-halverson/ECOv002-calval-tables
|
|
@@ -9,6 +9,7 @@ Classifier: Operating System :: OS Independent
|
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: daylight-evapotranspiration>=v1.3.4
|
|
12
13
|
Requires-Dist: pandas
|
|
13
14
|
Requires-Dist: geopandas
|
|
14
15
|
Requires-Dist: numpy
|
|
@@ -10,6 +10,7 @@ ECOv002_calval_tables/load_tables.py
|
|
|
10
10
|
ECOv002_calval_tables/metadata_ebc_filt.csv
|
|
11
11
|
ECOv002_calval_tables/plot_funcs.py
|
|
12
12
|
ECOv002_calval_tables/plot_single_model.py
|
|
13
|
+
ECOv002_calval_tables/upscale_to_daylight.py
|
|
13
14
|
ECOv002_calval_tables/version.py
|
|
14
15
|
ECOv002_calval_tables.egg-info/PKG-INFO
|
|
15
16
|
ECOv002_calval_tables.egg-info/SOURCES.txt
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ECOv002-calval-tables
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.1
|
|
4
4
|
Summary: Priestley-Taylor Jet Propulsion Laboratory Soil Moisutre Evapotranspiration Model
|
|
5
5
|
Author-email: Gregory Halverson <gregory.h.halverson@jpl.nasa.gov>, Zoe Pierrat <zoe.a.pierrat@jpl.nasa.gov>
|
|
6
6
|
Project-URL: Homepage, https://github.com/gregory-halverson/ECOv002-calval-tables
|
|
@@ -9,6 +9,7 @@ Classifier: Operating System :: OS Independent
|
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: daylight-evapotranspiration>=v1.3.4
|
|
12
13
|
Requires-Dist: pandas
|
|
13
14
|
Requires-Dist: geopandas
|
|
14
15
|
Requires-Dist: numpy
|
|
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"]
|
|
|
3
3
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "ECOv002-calval-tables"
|
|
6
|
-
version = "1.
|
|
6
|
+
version = "1.7.1"
|
|
7
7
|
description = "Priestley-Taylor Jet Propulsion Laboratory Soil Moisutre Evapotranspiration Model"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
authors = [
|
|
@@ -15,6 +15,7 @@ classifiers = [
|
|
|
15
15
|
"Operating System :: OS Independent",
|
|
16
16
|
]
|
|
17
17
|
dependencies = [
|
|
18
|
+
"daylight-evapotranspiration>=v1.3.4",
|
|
18
19
|
"pandas",
|
|
19
20
|
"geopandas",
|
|
20
21
|
"numpy",
|
|
@@ -39,5 +40,8 @@ dev = [
|
|
|
39
40
|
[tool.setuptools.package-data]
|
|
40
41
|
ECOv002_calval_tables = ["*.csv"]
|
|
41
42
|
|
|
43
|
+
[tool.setuptools.packages.find]
|
|
44
|
+
exclude = ["notebooks*"]
|
|
45
|
+
|
|
42
46
|
[project.urls]
|
|
43
47
|
"Homepage" = "https://github.com/gregory-halverson/ECOv002-calval-tables"
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import matplotlib.pyplot as plt
|
|
3
|
-
import numpy as np
|
|
4
|
-
import matplotlib.lines as mlines
|
|
5
|
-
import os
|
|
6
|
-
import pandas as pd
|
|
7
|
-
from typing import Optional
|
|
8
|
-
from . import error_funcs
|
|
9
|
-
|
|
10
|
-
def quick_look_plot_single_model(
|
|
11
|
-
big_df_ss: pd.DataFrame,
|
|
12
|
-
time: str,
|
|
13
|
-
model_col: str,
|
|
14
|
-
model_name: str,
|
|
15
|
-
LE_var: str = 'LEcorr50',
|
|
16
|
-
output_filename: Optional[str] = None
|
|
17
|
-
) -> None:
|
|
18
|
-
"""
|
|
19
|
-
Plots the results for a single model against flux tower LE.
|
|
20
|
-
Parameters:
|
|
21
|
-
big_df_ss: pd.DataFrame containing all data
|
|
22
|
-
time: string for output file naming
|
|
23
|
-
model_col: column name for model output
|
|
24
|
-
model_name: display name for the model
|
|
25
|
-
LE_var: column name for flux tower LE (default 'LEcorr50')
|
|
26
|
-
output_filename: Optional path for output figure file. If None, figure is not saved.
|
|
27
|
-
"""
|
|
28
|
-
colors = {
|
|
29
|
-
'CRO': '#FFEC8B', 'CSH': '#AB82FF', 'CVM': '#8B814C',
|
|
30
|
-
'DBF': '#98FB98', 'EBF': '#7FFF00', 'ENF': '#006400',
|
|
31
|
-
'GRA': '#FFA54F', 'MF': '#8FBC8F', 'OSH': '#FFE4E1',
|
|
32
|
-
'SAV': '#FFD700', 'WAT': '#98F5FF', 'WET': '#4169E1',
|
|
33
|
-
'WSA': '#CDAA7D'
|
|
34
|
-
}
|
|
35
|
-
scatter_colors = [colors.get(veg, 'gray') for veg in big_df_ss['vegetation']]
|
|
36
|
-
one2one = np.arange(-250, 1200, 5)
|
|
37
|
-
def calculate_metrics(x, y):
|
|
38
|
-
rmse = error_funcs.rmse(y, x)
|
|
39
|
-
r2 = error_funcs.R2_fun(y, x)
|
|
40
|
-
slope, intercept = error_funcs.lin_regress(y, x)
|
|
41
|
-
bias = error_funcs.BIAS_fun(y,x)
|
|
42
|
-
return rmse, r2, slope, intercept, bias
|
|
43
|
-
x = big_df_ss[LE_var].to_numpy()
|
|
44
|
-
y = big_df_ss[model_col].to_numpy()
|
|
45
|
-
err = big_df_ss['ETinstUncertainty'].to_numpy() if 'ETinstUncertainty' in big_df_ss.columns else None
|
|
46
|
-
xerr = big_df_ss[['LE_filt', 'LEcorr50', 'LEcorr_ann']].std(axis=1).to_numpy() if all(col in big_df_ss.columns for col in ['LE_filt', 'LEcorr50', 'LEcorr_ann']) else None
|
|
47
|
-
rmse, r2, slope, intercept, bias = calculate_metrics(x, y)
|
|
48
|
-
number_of_points = np.sum(~np.isnan(y) & ~np.isnan(x))
|
|
49
|
-
fig, ax = plt.subplots(figsize=(6, 6))
|
|
50
|
-
if err is not None and xerr is not None:
|
|
51
|
-
ax.errorbar(x, y, yerr=err, xerr=xerr, fmt='none', ecolor='lightgray')
|
|
52
|
-
ax.scatter(x, y, c=scatter_colors, marker='o', s=6, zorder=4)
|
|
53
|
-
ax.plot(one2one, one2one, '--', c='k')
|
|
54
|
-
ax.plot(one2one, one2one * slope + intercept, '--', c='gray')
|
|
55
|
-
ax.set_title(model_name)
|
|
56
|
-
ax.set_xlim([-250, 1200])
|
|
57
|
-
ax.set_ylim([-250, 1200])
|
|
58
|
-
ax.set_ylabel('Model LE Wm$^{-2}$',fontsize=14)
|
|
59
|
-
ax.set_xlabel('Flux Tower LE Wm$^{-2}$',fontsize=14)
|
|
60
|
-
ax.text(-0.1, 1.1, 'a)', transform=ax.transAxes, fontsize=16, fontweight='bold', va='top', ha='right')
|
|
61
|
-
ax.text(500, -200, f'y = {slope:.1f}x + {intercept:.1f} \nRMSE: {rmse:.1f} Wm$^-$² \nbias: {bias:.1f} Wm$^-$² \nR$^2$: {r2:.2f}', fontsize=12)
|
|
62
|
-
scatter_handles = [mlines.Line2D([], [], color=color, marker='o', linestyle='None', markersize=6, label=veg) for veg, color in colors.items()]
|
|
63
|
-
fig.legend(handles=scatter_handles, loc='lower center', bbox_to_anchor=(0.5, -0.05), ncol=7, title='Vegetation Type',fontsize=10)
|
|
64
|
-
fig.subplots_adjust(bottom=0.2)
|
|
65
|
-
fig.tight_layout()
|
|
66
|
-
if output_filename is not None:
|
|
67
|
-
fig.savefig(output_filename, dpi=600, bbox_inches='tight')
|
|
68
|
-
# Return the figure object for notebook display
|
|
69
|
-
return fig
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/error_funcs.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/plot_funcs.py
RENAMED
|
File without changes
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/ECOv002_calval_tables/version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_import_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecov002_calval_tables-1.5.0 → ecov002_calval_tables-1.7.1}/tests/test_load_metadata_ebc_filt.py
RENAMED
|
File without changes
|