forgegraph 0.6.0__tar.gz → 0.6.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.
- {forgegraph-0.6.0 → forgegraph-0.6.1}/CHANGELOG.md +11 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/CONTRIBUTING.md +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/PKG-INFO +2 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/README.md +1 -0
- forgegraph-0.6.1/docs/examples/acme_polarization.yaml +24 -0
- forgegraph-0.6.1/docs/examples/assay_summary.yaml +33 -0
- forgegraph-0.6.1/docs/examples/cells.layout.yaml +26 -0
- forgegraph-0.6.1/docs/examples/co2.yaml +28 -0
- forgegraph-0.6.1/docs/examples/dose_response.yaml +33 -0
- forgegraph-0.6.1/docs/examples/durability.yaml +26 -0
- forgegraph-0.6.1/docs/examples/lab_polarization.yaml +24 -0
- forgegraph-0.6.1/docs/examples/packs/lab/formats/poster.yaml +11 -0
- forgegraph-0.6.1/docs/examples/packs/lab/pack.yaml +5 -0
- forgegraph-0.6.1/docs/examples/packs/lab/themes/lab_theme.yaml +13 -0
- forgegraph-0.6.1/docs/examples/penguins.yaml +29 -0
- forgegraph-0.6.1/docs/examples/polarization.yaml +24 -0
- forgegraph-0.6.1/docs/examples/savings.yaml +58 -0
- forgegraph-0.6.1/docs/examples/tips_side_by_side.yaml +46 -0
- forgegraph-0.6.1/docs/examples/tips_stacked.yaml +42 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/pack.md +1 -1
- forgegraph-0.6.1/docs/site/gallery.md +123 -0
- forgegraph-0.6.1/docs/site/guides/configs.md +38 -0
- forgegraph-0.6.1/docs/site/guides/graphs.md +74 -0
- forgegraph-0.6.1/docs/site/guides/layers.md +57 -0
- forgegraph-0.6.1/docs/site/guides/layouts.md +66 -0
- forgegraph-0.6.1/docs/site/guides/provenance.md +41 -0
- forgegraph-0.6.1/docs/site/guides/schedules.md +42 -0
- forgegraph-0.6.1/docs/site/guides/series.md +92 -0
- forgegraph-0.6.1/docs/site/guides/themes-formats-packs.md +70 -0
- forgegraph-0.6.1/docs/site/help/troubleshooting.md +133 -0
- forgegraph-0.6.1/docs/site/release-notes.md +3 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_reference.md +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/pack.md +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/mkdocs.yml +21 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/pyproject.toml +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/docs_site.py +113 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/layers.py +14 -6
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/pack.yaml +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_reference.yaml +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/pack.yaml +1 -1
- forgegraph-0.6.1/tests/test_docs_site.py +27 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_layers.py +48 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/uv.lock +1 -1
- {forgegraph-0.6.0 → forgegraph-0.6.1}/.gitignore +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/.pre-commit-config.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/CITATION.cff +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/LICENSE +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/SECURITY.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/TRADEMARKS.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/design/architecture.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/design/initial-specification.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/formats/slide.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/graphspecs/polarization-curve.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/layouts/dashboard.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/pack.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/schedules/workday.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/themes/acme.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/formats/compact_format.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/formats/wide_format.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/themes/light_theme.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/formats/compact_format.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/formats/wide_format.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/graphspecs/graphspec_example.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/layouts/layout.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/schedules/schedule.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/themes/light_theme.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/installation.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/quickstart.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/skill.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/index.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/reference/python-api.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/stylesheets/extra.css +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/graphtype_xy.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_error_bar.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_note.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_reference.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/config.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/format.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/graphspec_example.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/graphtype_xy.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_error_bar.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_note.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layout_example.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/provenance.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/schedule.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/styles.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/theme.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/README.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/forgegraph.toml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lab_throughput.layout.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lab_throughput.layout.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lost_runs.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lost_runs.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/formats/dashboard.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/formats/dashboard.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/pack.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/prep_lab_dashboard.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/run_time.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/run_time.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_gc_ms_01.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_hplc_01.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_hplc_02.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_icp_oes_01.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/samples_weekly.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/throughput_weekly.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_gc_ms_01.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_hplc_01.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_hplc_02.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_icp_oes_01.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_runs.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_samples.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_durability.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_performance.layout.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_performance.layout.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_polarization.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/forgegraph.toml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/hfr_time.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/formats/journal-double.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/formats/journal-double.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/pack.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/polarization.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/prep_cells.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/voltage_time.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/formats/slide.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/graphspecs/polarization-curve.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/layouts/dashboard.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/pack.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/references/house.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/schedules/workday.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/themes/acme.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/README.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/air_passengers.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/air_passengers_by_month.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/anscombe.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/assay_summary.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/cell_durability.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/cell_polarization.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/co2_monthly.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/diamonds.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/dose_response.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/economics.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/enzyme_kinetics.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/fmri.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/gapminder.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/geyser.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/growth.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/iris.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/lab_export.xlsx +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/lab_runs.xlsx +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/penguins.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/seaice.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/sensor_log_eu.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/stocks.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/tips.csv +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/weather.xlsx +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_example_data.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_recreations.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_sample_data.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/check_denylist.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/forgemark.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/mirror_specs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/report_skill_evals.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/run_skill_evals.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/smoke_installed.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/visual_changelog.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/__main__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/canvas.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/build.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/cards.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/examples.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/files.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/page.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/catalog.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/graphs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/jobs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/schema.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/skill.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/data.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/axes.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/colorbar.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/dates.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/errors.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/export.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/figure.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/key.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/labels.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/layout.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/limits.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/lint.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/marks.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/markup.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/page.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/readout.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/spacing.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/style.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/text.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/ticks.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/xy.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawn.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Bold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Light.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Medium.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Regular.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-SemiBold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-IBMPlexSerif.txt +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-Roboto.txt +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-SourceSans3.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Bold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Italic.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Light.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Medium.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Regular.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-SemiBold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Bold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-It.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Light.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Medium.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Regular.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Semibold.ttf +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/forgemark.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/graph.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/run.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/status.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/layouts/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/layouts/separators.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/formats/compact_format.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/formats/wide_format.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/themes/light_theme.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/formats/compact_format.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/formats/wide_format.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/dated.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/fanned.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/graphspec_example.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/polarization.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/reinforced.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/layouts/layout.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/schedules/schedule.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/themes/light_theme.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/SKILL.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/bars.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/figure.layout.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/figure.schedule.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/layers.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/xy.parquet +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/xy.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/references/requests.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/references/themes_formats_configs.md +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/__init__.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/access.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/common.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/explain.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/layers.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/layout.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/loaded.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/parameters.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/provenance.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/registry.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/resolve.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/schedule.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/series.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/tags.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/validate.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/graphtype_xy.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_error_bar.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_note.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_reference.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/config.toml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/format.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/graphspec_example.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/graphtype_xy.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_error_bar.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_note.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layout_example.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/provenance.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/schedule.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/styles.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/theme.yaml +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/crowded_runs.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/flow_sweep_wide.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/fuel_by_size.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/layout_anode_layers.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/layout_screening_and_rate.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/polarization.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/polarization_narrow.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/precipitation_loglog.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/replicates.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/screening_scatter.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/separator_colorbar.png +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/conftest.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/fixtures/catalog_comments.html +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/pack_helpers.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/recreations.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/render_helpers.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/spec_mirror.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_axes.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_blank.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_files.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_inputs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_page.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_cli.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_dates.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_denylist.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_jobs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_key_position.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_labels.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_layout.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_lint.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_marks.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_markup.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_packaging.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_packs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_perturbation.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_readout.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_regression.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_render.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_schedule.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_series.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_smoke.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_spec_comments.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_spec_mirrors.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_specs.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_styles.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_tags.py +0 -0
- {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_text.py +0 -0
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeGraph follows [semantic versioning](https://semver.org). Before 1.0, a minor version may change how graphs look or how specs are written.
|
|
4
4
|
|
|
5
|
+
## 0.6.1 (2026-10-31)
|
|
6
|
+
|
|
7
|
+
### Changes
|
|
8
|
+
|
|
9
|
+
- **A reference line for each look.** With `per_series`, a reference layer now draws a line for each look its series are drawn in: each color, marker shape, marker fill and line style. Before, groups that differed only in marker shape, fill or line style shared one line. Lines that `split` draws, such as replicates, still share one.
|
|
10
|
+
- **Guides on the documentation site.** The site now has a guide to each part of ForgeGraph, a gallery of worked examples, help with every lint issue and common error, and the release notes.
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- `per_series` with series colored on a scale is now an error. Before, it drew a single line over all the rows in the palette's first color.
|
|
15
|
+
|
|
5
16
|
## 0.6.0 (2026-10-30)
|
|
6
17
|
|
|
7
18
|
### New Features
|
|
@@ -33,7 +33,7 @@ uv run python scripts/build_recreations.py --baselines
|
|
|
33
33
|
|
|
34
34
|
## The documentation site
|
|
35
35
|
|
|
36
|
-
The site is built with MkDocs from docs/site. Its Reference pages are generated as it's built: the commands from the CLI, the specifications and the built-in pack from their files, and the Python API from the docstrings (scripts/docs_site.py). To build it and read it while you work:
|
|
36
|
+
The site is built with MkDocs from docs/site. Its Reference pages are generated as it's built: the commands from the CLI, the specifications and the built-in pack from their files, and the Python API from the docstrings (scripts/docs_site.py). The guides' and gallery's graphs are drawn as it's built, from the GraphSpecs, layouts and pack in docs/examples and the layouts in examples/layouts, with data from examples/sample-data, so an example that can't be drawn standard and lint-clean fails the build. To build it and read it while you work:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
39
|
uv run --group docs mkdocs serve
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: forgegraph
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1
|
|
4
4
|
Summary: Fast, consistent, publication-quality graphs from pandas DataFrames, usable by people and AI agents.
|
|
5
5
|
Project-URL: Repository, https://github.com/sskaye/forgegraph
|
|
6
6
|
Project-URL: Issues, https://github.com/sskaye/forgegraph/issues
|
|
@@ -172,6 +172,7 @@ ForgeGraph is [MIT-licensed](https://github.com/sskaye/forgegraph/blob/main/LICE
|
|
|
172
172
|
|
|
173
173
|
## Documentation
|
|
174
174
|
|
|
175
|
+
- [Documentation site](https://sskaye.github.io/forgegraph/): getting started, and a reference for every specification, command and Python function.
|
|
175
176
|
- [Specifications](https://github.com/sskaye/forgegraph/blob/main/docs/specifications): the file that defines each kind of spec, every parameter with its default, range and description.
|
|
176
177
|
- [Built-in pack](https://github.com/sskaye/forgegraph/blob/main/docs/packs/forgegraph_default): forgegraph_default's specs.
|
|
177
178
|
- [Changelog](https://github.com/sskaye/forgegraph/blob/main/CHANGELOG.md).
|
|
@@ -142,6 +142,7 @@ ForgeGraph is [MIT-licensed](https://github.com/sskaye/forgegraph/blob/main/LICE
|
|
|
142
142
|
|
|
143
143
|
## Documentation
|
|
144
144
|
|
|
145
|
+
- [Documentation site](https://sskaye.github.io/forgegraph/): getting started, and a reference for every specification, command and Python function.
|
|
145
146
|
- [Specifications](https://github.com/sskaye/forgegraph/blob/main/docs/specifications): the file that defines each kind of spec, every parameter with its default, range and description.
|
|
146
147
|
- [Built-in pack](https://github.com/sskaye/forgegraph/blob/main/docs/packs/forgegraph_default): forgegraph_default's specs.
|
|
147
148
|
- [Changelog](https://github.com/sskaye/forgegraph/blob/main/CHANGELOG.md).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: acme_polarization
|
|
2
|
+
version: 0
|
|
3
|
+
description: The polarization curves in the example acme pack's theme and slide format.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: acme/acme
|
|
9
|
+
format: acme/slide
|
|
10
|
+
text:
|
|
11
|
+
title: Polarization curves
|
|
12
|
+
data:
|
|
13
|
+
file: cell_polarization.parquet
|
|
14
|
+
preprocessing: examples/sample-data/cell_polarization.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: current_density_a_cm2
|
|
19
|
+
title: Current density (A/cm^2)
|
|
20
|
+
y:
|
|
21
|
+
title: Voltage (V)
|
|
22
|
+
series:
|
|
23
|
+
voltage_v:
|
|
24
|
+
color: cell
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: assay_summary
|
|
2
|
+
version: 0
|
|
3
|
+
description: Each compound's mean response at each dose, with error bars from the standard deviations in the data.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Dose response
|
|
12
|
+
data:
|
|
13
|
+
file: assay_summary.parquet
|
|
14
|
+
preprocessing: examples/sample-data/assay_summary.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: dose_uM
|
|
19
|
+
type: categorical
|
|
20
|
+
title: Dose (µM)
|
|
21
|
+
y:
|
|
22
|
+
title: Response (%)
|
|
23
|
+
series:
|
|
24
|
+
mean_response_pct:
|
|
25
|
+
color: compound
|
|
26
|
+
layers:
|
|
27
|
+
spread:
|
|
28
|
+
type: error_bar
|
|
29
|
+
value:
|
|
30
|
+
lower: sd_pct
|
|
31
|
+
upper: sd_pct
|
|
32
|
+
aggregation:
|
|
33
|
+
function: None
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: cells
|
|
2
|
+
version: 0
|
|
3
|
+
description: The fuel cells' graphs under one tab, beside a tab of the CO₂ record.
|
|
4
|
+
extends: forgegraph_default/layout
|
|
5
|
+
|
|
6
|
+
parameters:
|
|
7
|
+
specifications:
|
|
8
|
+
format: forgegraph_default/compact_format
|
|
9
|
+
tabs:
|
|
10
|
+
Cells:
|
|
11
|
+
tabs:
|
|
12
|
+
Polarization:
|
|
13
|
+
grid:
|
|
14
|
+
areas: [[curves]]
|
|
15
|
+
tiles:
|
|
16
|
+
curves: polarization.yaml
|
|
17
|
+
Durability:
|
|
18
|
+
grid:
|
|
19
|
+
areas: [[voltage]]
|
|
20
|
+
tiles:
|
|
21
|
+
voltage: durability.yaml
|
|
22
|
+
CO2:
|
|
23
|
+
grid:
|
|
24
|
+
areas: [[record]]
|
|
25
|
+
tiles:
|
|
26
|
+
record: co2.yaml
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: co2
|
|
2
|
+
version: 0
|
|
3
|
+
description: Monthly CO₂ at Mauna Loa, on a date axis, with the line broken where a month is missing.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Atmospheric CO_{2}
|
|
12
|
+
data:
|
|
13
|
+
file: co2_monthly.parquet
|
|
14
|
+
preprocessing: examples/sample-data/co2_monthly.csv, with its dates read as dates and -99.99 as missing
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: date
|
|
19
|
+
title: None
|
|
20
|
+
y:
|
|
21
|
+
title: CO_{2} (ppm)
|
|
22
|
+
series:
|
|
23
|
+
Monthly mean:
|
|
24
|
+
column: co2_ppm
|
|
25
|
+
marker:
|
|
26
|
+
show: false
|
|
27
|
+
line:
|
|
28
|
+
missing_values: gap
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: dose_response
|
|
2
|
+
version: 0
|
|
3
|
+
description: The mean response of three compounds at each dose, with error bars of one standard deviation and a note.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Dose response
|
|
12
|
+
data:
|
|
13
|
+
file: dose_response.parquet
|
|
14
|
+
preprocessing: examples/sample-data/dose_response.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: dose_uM
|
|
19
|
+
type: categorical
|
|
20
|
+
title: Dose (µM)
|
|
21
|
+
y:
|
|
22
|
+
title: Response (%)
|
|
23
|
+
series:
|
|
24
|
+
response_pct:
|
|
25
|
+
aggregation:
|
|
26
|
+
function: mean
|
|
27
|
+
color: compound
|
|
28
|
+
layers:
|
|
29
|
+
spread:
|
|
30
|
+
type: error_bar
|
|
31
|
+
replicates:
|
|
32
|
+
type: note
|
|
33
|
+
text: Mean ± SD of 3 replicates
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: durability
|
|
2
|
+
version: 0
|
|
3
|
+
description: Each cell's voltage over a 200-hour durability test, as lines without markers.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Durability test
|
|
12
|
+
data:
|
|
13
|
+
file: cell_durability.parquet
|
|
14
|
+
preprocessing: examples/sample-data/cell_durability.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: hours
|
|
19
|
+
title: Time (h)
|
|
20
|
+
y:
|
|
21
|
+
title: Voltage (V)
|
|
22
|
+
series:
|
|
23
|
+
voltage_v:
|
|
24
|
+
color: cell
|
|
25
|
+
marker:
|
|
26
|
+
show: false
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: lab_polarization
|
|
2
|
+
version: 0
|
|
3
|
+
description: The polarization curves in the lab pack's theme and poster format.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: lab/lab_theme
|
|
9
|
+
format: lab/poster
|
|
10
|
+
text:
|
|
11
|
+
title: Polarization curves
|
|
12
|
+
data:
|
|
13
|
+
file: cell_polarization.parquet
|
|
14
|
+
preprocessing: examples/sample-data/cell_polarization.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: current_density_a_cm2
|
|
19
|
+
title: Current density (A/cm^2)
|
|
20
|
+
y:
|
|
21
|
+
title: Voltage (V)
|
|
22
|
+
series:
|
|
23
|
+
voltage_v:
|
|
24
|
+
color: cell
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
name: poster
|
|
2
|
+
version: 0
|
|
3
|
+
description: A graph for a poster, wider than the built-in compact format and with larger text.
|
|
4
|
+
extends: forgegraph_default/compact_format
|
|
5
|
+
|
|
6
|
+
parameters:
|
|
7
|
+
figure:
|
|
8
|
+
width: 200
|
|
9
|
+
base_size: 22
|
|
10
|
+
output:
|
|
11
|
+
file_types: [png, pdf]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
name: lab_theme
|
|
2
|
+
version: 0
|
|
3
|
+
description: The lab's look, the built-in theme with Paul Tol's bright colors and horizontal grid lines.
|
|
4
|
+
extends: forgegraph_default/light_theme
|
|
5
|
+
|
|
6
|
+
parameters:
|
|
7
|
+
series:
|
|
8
|
+
colors: tol_bright
|
|
9
|
+
grid:
|
|
10
|
+
y:
|
|
11
|
+
show: true
|
|
12
|
+
title:
|
|
13
|
+
weight: bold
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: penguins
|
|
2
|
+
version: 0
|
|
3
|
+
description: Bill depth against bill length for three penguin species, as markers colored and shaped by species.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Penguin bills
|
|
12
|
+
data:
|
|
13
|
+
file: penguins.parquet
|
|
14
|
+
preprocessing: examples/sample-data/penguins.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: bill_length_mm
|
|
19
|
+
title: Bill length (mm)
|
|
20
|
+
y:
|
|
21
|
+
title: Bill depth (mm)
|
|
22
|
+
series:
|
|
23
|
+
bill_depth_mm:
|
|
24
|
+
color: species
|
|
25
|
+
line:
|
|
26
|
+
show: false
|
|
27
|
+
marker:
|
|
28
|
+
shape: species
|
|
29
|
+
size: 0.3
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: polarization
|
|
2
|
+
version: 0
|
|
3
|
+
description: Polarization curves of three fuel cells, voltage against current density.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Polarization curves
|
|
12
|
+
data:
|
|
13
|
+
file: cell_polarization.parquet
|
|
14
|
+
preprocessing: examples/sample-data/cell_polarization.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: current_density_a_cm2
|
|
19
|
+
title: Current density (A/cm^2)
|
|
20
|
+
y:
|
|
21
|
+
title: Voltage (V)
|
|
22
|
+
series:
|
|
23
|
+
voltage_v:
|
|
24
|
+
color: cell
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: savings
|
|
2
|
+
version: 0
|
|
3
|
+
description: The personal savings rate by month, with a line at its mean and a band one standard deviation either side.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Personal savings rate
|
|
12
|
+
data:
|
|
13
|
+
file: economics.parquet
|
|
14
|
+
preprocessing: examples/sample-data/economics.csv, with its dates read as dates
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: date
|
|
19
|
+
title: None
|
|
20
|
+
y:
|
|
21
|
+
title: Savings rate (%)
|
|
22
|
+
series:
|
|
23
|
+
Savings rate:
|
|
24
|
+
column: psavert
|
|
25
|
+
marker:
|
|
26
|
+
show: false
|
|
27
|
+
layers:
|
|
28
|
+
spread:
|
|
29
|
+
type: reference
|
|
30
|
+
axis: y
|
|
31
|
+
line_1:
|
|
32
|
+
value: psavert
|
|
33
|
+
aggregation:
|
|
34
|
+
function: mean
|
|
35
|
+
offset:
|
|
36
|
+
function: stddev
|
|
37
|
+
multiplier: -1
|
|
38
|
+
line:
|
|
39
|
+
style: None
|
|
40
|
+
line_2:
|
|
41
|
+
value: psavert
|
|
42
|
+
aggregation:
|
|
43
|
+
function: mean
|
|
44
|
+
offset:
|
|
45
|
+
function: stddev
|
|
46
|
+
line:
|
|
47
|
+
style: None
|
|
48
|
+
mean:
|
|
49
|
+
type: reference
|
|
50
|
+
axis: y
|
|
51
|
+
line_1:
|
|
52
|
+
value: psavert
|
|
53
|
+
aggregation:
|
|
54
|
+
function: mean
|
|
55
|
+
label:
|
|
56
|
+
text: aggregation_value
|
|
57
|
+
position: end_above
|
|
58
|
+
inside: false
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: tips_side_by_side
|
|
2
|
+
version: 0
|
|
3
|
+
description: The mean tip on each day, for women and men side by side, with the 95 % confidence interval of each mean.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Tips by day
|
|
12
|
+
data:
|
|
13
|
+
file: tips.parquet
|
|
14
|
+
preprocessing: examples/sample-data/tips.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: day
|
|
19
|
+
order:
|
|
20
|
+
method: value
|
|
21
|
+
direction: descending
|
|
22
|
+
title: None
|
|
23
|
+
y:
|
|
24
|
+
title: Mean tip ($)
|
|
25
|
+
arrangement:
|
|
26
|
+
offset: side_by_side
|
|
27
|
+
legend:
|
|
28
|
+
key:
|
|
29
|
+
inside: false
|
|
30
|
+
series:
|
|
31
|
+
tip:
|
|
32
|
+
aggregation:
|
|
33
|
+
function: mean
|
|
34
|
+
color: sex
|
|
35
|
+
line:
|
|
36
|
+
show: false
|
|
37
|
+
marker:
|
|
38
|
+
show: false
|
|
39
|
+
bar:
|
|
40
|
+
show: true
|
|
41
|
+
layers:
|
|
42
|
+
spread:
|
|
43
|
+
type: error_bar
|
|
44
|
+
value:
|
|
45
|
+
aggregation:
|
|
46
|
+
function: ci
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: tips_stacked
|
|
2
|
+
version: 0
|
|
3
|
+
description: The total of the bills on each day, stacked by lunch and dinner, with each day's total written above.
|
|
4
|
+
extends: None
|
|
5
|
+
parameters: !var
|
|
6
|
+
specifications:
|
|
7
|
+
graph_type: xy
|
|
8
|
+
theme: forgegraph_default/light_theme
|
|
9
|
+
format: forgegraph_default/compact_format
|
|
10
|
+
text:
|
|
11
|
+
title: Bills by day
|
|
12
|
+
data:
|
|
13
|
+
file: tips.parquet
|
|
14
|
+
preprocessing: examples/sample-data/tips.csv, unchanged
|
|
15
|
+
axis:
|
|
16
|
+
x:
|
|
17
|
+
data:
|
|
18
|
+
column: day
|
|
19
|
+
order:
|
|
20
|
+
method: value
|
|
21
|
+
direction: descending
|
|
22
|
+
title: None
|
|
23
|
+
y:
|
|
24
|
+
title: Total of the bills ($)
|
|
25
|
+
arrangement:
|
|
26
|
+
stacking: sum
|
|
27
|
+
total:
|
|
28
|
+
show: true
|
|
29
|
+
legend:
|
|
30
|
+
key:
|
|
31
|
+
inside: false
|
|
32
|
+
series:
|
|
33
|
+
total_bill:
|
|
34
|
+
aggregation:
|
|
35
|
+
function: sum
|
|
36
|
+
color: time
|
|
37
|
+
line:
|
|
38
|
+
show: false
|
|
39
|
+
marker:
|
|
40
|
+
show: false
|
|
41
|
+
bar:
|
|
42
|
+
show: true
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This page mirrors src/forgegraph/packs/forgegraph_default/pack.yaml, which is the specification. A test fails if they ever differ.
|
|
4
4
|
|
|
5
5
|
name: forgegraph_default *# \[text\]; The pack's name, which its specs' names start with (pack/name); a pip pack's must match its entry point.*\
|
|
6
|
-
version: 0.6.
|
|
6
|
+
version: 0.6.1 *# \[text\]; The pack's release version.*\
|
|
7
7
|
description: ForgeGraph's built-in default pack. So it’s always possible to create a graph. *# \[text\]; One line, describing what the pack is.*\
|
|
8
8
|
issues: https://github.com/sskaye/forgegraph/issues *# \[text\]; Where to file feature requests and bug reports about the pack.*\
|
|
9
9
|
requires: ">=0.6, <0.7" *# \[None, version specifier\]; The ForgeGraph version required for the pack. pip format, e.g. ">=0.6, <1". If None, it works with any version.*
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Gallery
|
|
2
|
+
|
|
3
|
+
Worked examples, each drawn from its GraphSpec as this site is built. The data is the [sample data](https://github.com/sskaye/forgegraph/tree/main/examples/sample-data) in the repository: synthetic look-alikes of the datasets data-visualization tutorials use, saved as Parquet. Open a GraphSpec to see how the graph is made; the [guides](guides/graphs.md) explain each part.
|
|
4
|
+
|
|
5
|
+
## Lines and markers
|
|
6
|
+
|
|
7
|
+
Polarization curves of three fuel cells, one line for each cell, named beside it. Data: cell_polarization.csv.
|
|
8
|
+
|
|
9
|
+
{ width="480" }
|
|
10
|
+
|
|
11
|
+
??? example "GraphSpec"
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
--8<-- "docs/examples/polarization.yaml"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Lines over time
|
|
18
|
+
|
|
19
|
+
Each cell's voltage over a 200-hour durability test, as lines without markers. Data: cell_durability.csv.
|
|
20
|
+
|
|
21
|
+
{ width="480" }
|
|
22
|
+
|
|
23
|
+
??? example "GraphSpec"
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
--8<-- "docs/examples/durability.yaml"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Dates
|
|
30
|
+
|
|
31
|
+
Monthly CO₂ at Mauna Loa on a date axis, with the line broken where a month is missing. Data: co2_monthly.csv, with its dates read as dates and −99.99, which marks a missing month, read as missing.
|
|
32
|
+
|
|
33
|
+
{ width="480" }
|
|
34
|
+
|
|
35
|
+
??? example "GraphSpec"
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
--8<-- "docs/examples/co2.yaml"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Groups by color and shape
|
|
42
|
+
|
|
43
|
+
Bill depth against bill length for three penguin species, as markers with a color and a shape for each species. Data: penguins.csv.
|
|
44
|
+
|
|
45
|
+
{ width="480" }
|
|
46
|
+
|
|
47
|
+
??? example "GraphSpec"
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
--8<-- "docs/examples/penguins.yaml"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Stacked bars
|
|
54
|
+
|
|
55
|
+
The total of the bills on each day, stacked by lunch and dinner, with each day's total, and the days in order of their totals. Data: tips.csv.
|
|
56
|
+
|
|
57
|
+
{ width="480" }
|
|
58
|
+
|
|
59
|
+
??? example "GraphSpec"
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
--8<-- "docs/examples/tips_stacked.yaml"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Bars side by side, with error bars
|
|
66
|
+
|
|
67
|
+
The mean tip on each day, for women and men side by side, each with the 95 % confidence interval of its mean. Data: tips.csv.
|
|
68
|
+
|
|
69
|
+
{ width="480" }
|
|
70
|
+
|
|
71
|
+
??? example "GraphSpec"
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
--8<-- "docs/examples/tips_side_by_side.yaml"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Error bars and a note
|
|
78
|
+
|
|
79
|
+
Three compounds' mean response at each dose, with error bars of one standard deviation of the replicates, and a note saying so. Data: dose_response.csv.
|
|
80
|
+
|
|
81
|
+
{ width="480" }
|
|
82
|
+
|
|
83
|
+
??? example "GraphSpec"
|
|
84
|
+
|
|
85
|
+
```yaml
|
|
86
|
+
--8<-- "docs/examples/dose_response.yaml"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## A reference line and band
|
|
90
|
+
|
|
91
|
+
The personal savings rate by month, with a line at its mean, labelled outside the plot, and a band one standard deviation either side. Data: economics.csv, with its dates read as dates.
|
|
92
|
+
|
|
93
|
+
{ width="480" }
|
|
94
|
+
|
|
95
|
+
??? example "GraphSpec"
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
--8<-- "docs/examples/savings.yaml"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## A dashboard
|
|
102
|
+
|
|
103
|
+
The Overview tab of a lab's throughput dashboard, from [examples/layouts/dashboard](https://github.com/sskaye/forgegraph/tree/main/examples/layouts/dashboard). Its other tab shows the runs on each instrument.
|
|
104
|
+
|
|
105
|
+

|
|
106
|
+
|
|
107
|
+
??? example "Layout"
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
--8<-- "examples/layouts/dashboard/lab_throughput.layout.yaml"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## A house style
|
|
114
|
+
|
|
115
|
+
The polarization curves in the example acme pack's theme, a serif look with a light grid and no box, and its 16:9 slide format. Its parameters differ from the first example's only in the theme and format. The pack is in [examples/packs/acme](https://github.com/sskaye/forgegraph/tree/main/examples/packs/acme).
|
|
116
|
+
|
|
117
|
+

|
|
118
|
+
|
|
119
|
+
??? example "GraphSpec"
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
--8<-- "docs/examples/acme_polarization.yaml"
|
|
123
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Configs
|
|
2
|
+
|
|
3
|
+
A **config** lists the packs that may be used: their themes, formats, GraphSpecs, layouts and schedules. It's how a person or an organization requires its house style, and how a graph made outside it is marked.
|
|
4
|
+
|
|
5
|
+
```toml
|
|
6
|
+
packs = ["forgegraph_default", "./lab"]
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Built-in and pip packs are listed by name, and folder packs by their path from the config file. `forgegraph schema config` lists the settings.
|
|
10
|
+
|
|
11
|
+
## The main config and folder configs
|
|
12
|
+
|
|
13
|
+
- **The main config**, `~/.config/forgegraph/config.toml` on every platform, or the file the `FORGEGRAPH_CONFIG` environment variable names, applies to all work. ForgeGraph writes it, listing the built-in pack, the first time a command reads the configs, such as `catalog` or `render`, and never overwrites it.
|
|
14
|
+
- **A folder config**, `forgegraph.toml`, applies to the files in its folder and in every folder below it. A file uses the nearest one: in its own folder, or else in the closest folder above it.
|
|
15
|
+
|
|
16
|
+
When both apply, a file may use only the packs the folder config lists. The configs are found from the file being drawn, not from the folder a command is run in, so a scheduled run is checked the same way as one by hand. `forgegraph catalog` and `forgegraph pack-notes` take `--folder` to show what may be used in another folder.
|
|
17
|
+
|
|
18
|
+
The example paper figure's folder has a config listing the built-in pack and its own journal pack:
|
|
19
|
+
|
|
20
|
+
```toml
|
|
21
|
+
--8<-- "examples/layouts/paper/forgegraph.toml"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Non-standard graphs
|
|
25
|
+
|
|
26
|
+
A pack that a folder config lists but the main config doesn't still works, but it's **non-standard**: whatever is drawn with it is watermarked, the record saved in the file names the pack, and ForgeGraph's commands say so:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Non-standard: pack 'acme' isn't in the main config (~/.config/forgegraph/config.toml), so whatever is drawn with it is watermarked
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
That way you can make and try a pack without changing an organization's main config, and nothing drawn with it passes as standard. List the pack in the main config to draw it as standard. A folder config can't give a pack the name of one the main config lists or a built-in pack's, so a folder can't swap an organization's pack for its own copy.
|
|
33
|
+
|
|
34
|
+
What's drawn on `fg.blank`, a themed canvas for drawing with matplotlib what no graph type can, is always non-standard, and watermarked the same way.
|
|
35
|
+
|
|
36
|
+
## Building on other packs
|
|
37
|
+
|
|
38
|
+
A config limits what a drawn file may name, not what a pack may build on. A pack's specs may extend specs in any pack a config that applies lists, or in an installed pip pack, even one a GraphSpec may not use. A spec made by extending is usable only if its own pack is allowed.
|