Gravicode.Visual.Net.Core
1.0.0
dotnet add package Gravicode.Visual.Net.Core --version 1.0.0
NuGet\Install-Package Gravicode.Visual.Net.Core -Version 1.0.0
<PackageReference Include="Gravicode.Visual.Net.Core" Version="1.0.0" />
<PackageVersion Include="Gravicode.Visual.Net.Core" Version="1.0.0" />
<PackageReference Include="Gravicode.Visual.Net.Core" />
paket add Gravicode.Visual.Net.Core --version 1.0.0
#r "nuget: Gravicode.Visual.Net.Core, 1.0.0"
#:package Gravicode.Visual.Net.Core@1.0.0
#addin nuget:?package=Gravicode.Visual.Net.Core&version=1.0.0
#tool nuget:?package=Gravicode.Visual.Net.Core&version=1.0.0
Visual.Net
The Python visualization stack, rewritten for .NET 10 — three libraries with an idiomatic .NET API, plus a desktop IDE whose assistant writes visualization apps for you.
Bahasa Indonesia: README.id.md
| Library | Python analogue | Focus |
|---|---|---|
| Matplotlib.Net | matplotlib | Static 2D and 3D figures → PNG, JPEG, WebP, SVG, PDF |
| Plotly.Net | plotly | Interactive charts → standalone HTML |
| Seaborn.Net | seaborn | Statistical graphics over Matplotlib.Net |
| Visual.Net.Core | matplotlib.colors, scipy.stats | Colour, colormaps, scales, plotting statistics, datasets |
| Visual.Net.Interactive | — | Polyglot Notebook formatters |
Quick start
git clone https://github.com/DotNetVibeCoderz/Vibe_Charting.git
cd Visual.Net
dotnet build
dotnet test
dotnet run --project samples/Matplotlib.Console
using Matplotlib.Net;
using Matplotlib.Net.Rendering;
using Matplotlib.Net.Styling;
var figure = new Figure(9, 5, style: PlotStyle.SeabornWhiteGrid());
var ax = figure.AddSubplot();
var x = Enumerable.Range(0, 400).Select(i => i * 4 * Math.PI / 399).ToArray();
ax.Plot(x, x.Select(Math.Sin).ToArray(), "sin(x)");
ax.Plot(x, x.Select(Math.Cos).ToArray(), "cos(x)", style: LineStyle.Dashed);
ax.SetTitle("Trigonometric functions");
ax.SetXLabel("x (radians)");
ax.Legend();
figure.Save("chart.png"); // or .svg, .pdf, .jpg, .webp
What is in the box
src/ five class libraries
samples/ console apps in C#, F# and VB.Net, an Avalonia gallery, a Blazor site
tools/ VisualGen — a desktop IDE whose assistant builds visualization apps
notebooks/ Polyglot notebooks
docs/ English, with Bahasa Indonesia in docs/id/
tests/ 167 tests, including 12 image baselines
datasets/ Iris and Titanic
benchmarks/ the matplotlib comparison, both harnesses and the join script
VisualGen
A desktop IDE with an assistant, Jack — the Code Bender, that writes the files and runs the build itself rather than printing code for you to copy.
dotnet run --project tools/VisualGen
An editor with syntax highlighting and a file explorer, 12 project templates that all compile, and a chat panel backed by Semantic Kernel with kernel functions for project and file operations, build and run, web search, scraping, arithmetic, the clock, and a curated Visual.Net API reference.
Works with OpenAI, Azure OpenAI, Anthropic, Google and Ollama. Claude is served by a hand-written chat completion service, because Semantic Kernel has no official Anthropic connector.
Every template is verified in CI:
dotnet run --project tools/VisualGen -- --verify-templates
# All 12 templates build.
Design
Matplotlib.Net is the foundation. Seaborn.Net layers on it exactly as seaborn layers on
matplotlib, so every seaborn call returns an ordinary Figure you can then adjust with the
lower-level API. Plotly.Net is independent: it emits JSON, not pixels.
GraviNum ── GraviFrame ── Visual.Net.Core ──┬── Matplotlib.Net ── Seaborn.Net
└── Plotly.Net
Two rendering backends, one drawing interface. IRenderer is small on purpose — paths, text,
images, clipping. SkiaRenderer produces PNG, JPEG, WebP and PDF; SvgRenderer is hand-written so
that text stays as <text> elements rather than being flattened to paths. Both draw the same
geometry, so a figure looks identical in every format.
The numerics are borrowed, not rewritten. NdArray and DataFrame come from
Gravicode.Science — GraviNum is the NumPy layer,
GraviFrame the pandas layer. Reimplementing them would have been a worse copy of code that already
exists and is tested.
Contours are triangulated, not marching-squared. Each grid cell is split into two triangles and the field is treated as linear inside each one. That costs twice the primitives but removes the saddle ambiguity entirely, so both the lines and the filled bands always close.
3D is orthographic with a painter's algorithm. Every 3D artist reduces to a stream of facets, and the scene depth-sorts the whole stream before drawing — which is what lets a surface, a wireframe and a scatter interleave correctly in one figure.
How it compares to matplotlib, plotly and seaborn
| Visual.Net | Python | |
|---|---|---|
| What ports well | ||
| 2D chart types | line, scatter, bar, hist, step, stem, errorbar, fill, stack, box, violin, boxen, pie, imshow, contour, quiver, hist2d, hexbin | ✔ all present |
| 3D | surface, wireframe, scatter3d, line3d, bar3d, contour3d | ✔ |
| Projections | rectilinear, polar, 3D | ✔ (plus map projections via cartopy) |
| Output | PNG, JPEG, WebP, SVG, PDF, GIF, APNG, PPTX, DOCX | ✔ (plus PS, EPS; Office via extra packages) |
| Colormaps | 60+, including the perceptual family | ~170 |
| Styles | 13 built-in | ~26 |
| seaborn functions | 20 (rel/dis/cat/reg/matrix/grid families) | ~30 |
| Plotly trace types | 22 | ~40 |
| Where they differ | ||
| Text layout | multi-line and wrapped, no maths | full TeX subset via mathtext |
| Interactive backends | none (file output instead) | Qt, Tk, GTK, web |
| Animation | GIF and APNG | GIF, MP4, and the rest via ffmpeg |
| Performance | 1.7x faster overall on ten figures; slower on filled contours | see docs/Benchmarks.md |
| Latency to first chart | no interpreter start-up | interpreter plus import |
The honest summary: Visual.Net covers the chart types you reach for daily and the output formats
you ship, and does not attempt matplotlib's long tail — mathtext, interactive GUI backends, or map
projections. The perceptual colormaps now ship matplotlib's own tables, so they match colour for
colour. Where something remains approximate — the synthetic Make* datasets, GIF's 256-colour
palette — it is documented rather than glossed over.
Gallery
Seaborn.Net:
Plotly.Net writes HTML, so the samples in docs/charts/ are live — open any of them
in a browser.
Samples
| Sample | What it shows |
|---|---|
samples/Matplotlib.Console |
Every static chart type, saved to PNG, SVG and PDF |
samples/Plotly.Console |
13 interactive charts exported as HTML, including an animation |
samples/Seaborn.Console |
Statistical graphics: pair grids, clustermaps, facets |
samples/Visual.Net.Gallery |
Avalonia desktop gallery, with each chart's source in C#, F# and VB.Net |
samples/Visual.Net.Web |
Blazor site: inline SVG, live plotly.js, an analytics dashboard |
samples/Visual.Net.FSharp |
The same API from F# |
samples/Visual.Net.VisualBasic |
The same API from VB.Net |
dotnet run --project samples/Seaborn.Console
dotnet run --project samples/Visual.Net.Gallery
dotnet run --project samples/Visual.Net.Web # then open the printed URL
Notebooks
#r "nuget: Gravicode.Visual.Net.Interactive"
using Seaborn.Net;
using Visual.Net.Core.Data;
using Visual.Net.Interactive;
VisualNetFormatters.Register();
Sns.SetTheme(SeabornStyle.WhiteGrid);
var data = Datasets.MakePenguins();
var (figure, ax) = Sns.Subplots(8, 4.5);
Sns.KdePlot(data, "body_mass_g", hue: "species", ax: ax, fill: true);
figure // renders inline
Ready-made notebooks are in notebooks/.
Documentation
- Getting started
- Matplotlib.Net · Plotly.Net · Seaborn.Net · Visual.Net.Core
- Notebooks · VisualGen
- Comparison with the Python libraries · Benchmarks
- Bahasa Indonesia: docs/id/
Roadmap and status
PLAN.md is the roadmap; Progress.md tracks what is done.
All ten stages are done, with one deliberate exception: the packages build and the release workflow is written, but nothing has been published to nuget.org — that needs an account and a key, and a published version can be delisted but never withdrawn.
The last two stages were performance (benchmarked against matplotlib, honestly, in
docs/Benchmarks.md) and distribution (CI, image-comparison baselines, and a
dotnet new template pack).
Licence
MIT.
Dibuat oleh Gravicode Studios, dipimpin oleh Kang Fadhil.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Gravicode.Science.GraviFrame (>= 1.0.0)
- Gravicode.Science.GraviLearn (>= 1.0.0)
- Gravicode.Science.GraviNum (>= 1.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Gravicode.Visual.Net.Core:
| Package | Downloads |
|---|---|
|
Gravicode.Plotly.Net
Plotly for .NET: interactive, JavaScript-backed charts exported as standalone HTML. Dibuat oleh Gravicode Studios, dipimpin oleh Kang Fadhil. |
|
|
Gravicode.Matplotlib.Net
Matplotlib for .NET: 2D and 3D figures with PNG, SVG and PDF output. Dibuat oleh Gravicode Studios, dipimpin oleh Kang Fadhil. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 108 | 9/1/2026 |