
Modernized 64-bit Scientific Plotting for C, Fortran, Python, Julia & Java
✨ Free 2D Edition Available
Looking to get started right away? Download the free 2D Community Edition, view the 24/7 live telemetry demo, or explore all software below.
See GraphiC in Action: 24/7 Live Koi Pond Temperature Monitor
GraphiC is not just for static publication figures—it is an active, production-grade telemetry engine. An automated Aquascape IoT sensor continuously records water temperature in Dr. Rome's pond, streaming telemetry through a private server ingest pipe to a background Java 22 FFM engine on macOS that renders fresh 30-day diurnal vector curves in real time.
History of GraphiC
The IBM PC was released in 1981. At the time, George Kelley and I (James Rome) were plasma physicists studying nuclear fusion. We realized that generating graphical plots would give us critical insight into plasma equilibria and physical behavior, but the original IBM PC had very low-resolution graphics (CGA 320×200). To overcome this, we each purchased a Corona PC, which offered an amazing 640×480 pixel display.
However, we soon discovered that there was no software available to produce publication-grade scientific plots on microcomputers. We had been using the DISSPLA™ Fortran package on mainframes and were heavily influenced by its methodology. In both DISSPLA and GraphiC, plotting is a structured, procedural state machine:
-
Initialize Session:
bgnplot(device, mode, file) -
Page Dimensions & Units:
page(width, height) -
Start Page Canvas:
startplot(bgcolor) -
Set Plot Area & Origin:
area2d(xlen, ylen)andphysor(x, y) -
Calibrate Axes & Labels:
box(),heading(title),xname(x),yname(y),graf(...) -
Execute Plot Routines: Calling the authentic GraphiC routines across all languages (
conmat,curve,surmat,smdraw,polgrid,xlog, etc.) without obscuring them behind generic OOP abstractions. -
Close Frame & Subsystem: Always conclude with
endplot()followed bystopplot().
We insisted on vector graphics—where everything is a discrete point, stroke, or filled polygon—so that we could zoom in to inspect fine details on our computer screens and reproduce plots cleanly across pen plotters and laser printers.
We decided that the C language was best suited to run efficiently on a personal computer, but we had to learn it from scratch! We also studied 8086 assembly language and hand-coded critical inner loops in assembly to maximize rendering speed, since numerical math co-processors (like the 8087) were not yet available. It took us several years to perfect our lean, mean, fast C graphics engine. We subsequently founded Scientific Endeavors Corporation to market GraphiC worldwide to scientists and other technical workers.
After George passed away, his son Steve Kelley took his place in the company. Steve cleaned up numerous bugs, expanded features, and managed dedicated customer support. When Steve suffered an untimely death, we terminated Scientific Endeavors. And there the codebase sat, untouched, for over 30 years…
The 2026 Renaissance: Enter AI and Google Antigravity
In 2026, working in close collaboration with me, Google’s Antigravity autonomous AI coding agent resurrected the original GraphiC C archives.
Over the course of this modernization: Archaic 16-bit DOS segmented pointers, expanded memory (EMS) page banking, and disk overlays were eliminated in favor of a clean, flat 64-bit POSIX/C99 architecture running natively across macOS (Apple Silicon ARM64 & Intel), Linux, and Windows. Obsolete pen plotter support and the Tektronix storage file format were replaced by a modern W3C Scalable Vector Graphics (SVG) driver with an interactive browser-based viewer and live monitor streaming. And, complete multi-language parity was established—delivering first-class bindings for Modern Fortran (2003/2018/legacy F77), Python 3, Julia (GraphiC.jl), and Java 22 (Foreign Function & Memory API).
Most importantly, the core mathematical soul of GraphiC remains unaltered: the exact procedural state machine, analytical 3D hidden-surface horizon algorithms, Hershey stroke vector fonts (and now Postscript and TrueType), and precision coordinate transforms developed four decades ago are now preserved and running at native 64-bit speed for the next generation of scientific research.
Behind the Scenes: For an engineering deep dive into modernizing 40-year-old assembly and segmented-pointer C code, read the companion article: Modernizing a 40-Year-Old Scientific Plotting Library Using AI →
Advantages of GraphiC
- GraphiC is made for users who want to display data in new ways that are not part of standard "give me the data and I will plot it for you" programs.
- GraphiC can plot multiple views of data as it is being generated. Thus, long experiments can be monitored and stopped if things go awry. See a LIVE plot of my Koi Pond temperature here.
- Vector graphics allow zooming and panning in the included viewer. This allows an overview and study of details in one plot.
- GraphiC is fully self-contained and needs no other libraries or programs except for your compiler..
- The GraphiC C code was designed before numeric co-processors, and is extremely fast and compact.
- It was bug tested for many years and eventually, no changes were needed. (Bad for upgrade sales.)
- GraphiC has support for things such as Smith Charts and error function plots that are not included in most competitive packages.
- The Manual has numerous examples (ported to other languages on disk) that can be used as boiler plate for new plots. Several real-world examples that used GraphiC are also included.
- GraphiC powers several applications highlighted on this site—see my Try My Programs page for companion desktop utilities including What Beeped?, FindPlace, and AI Home Inventory Creator.
Get GraphiC 2026 Today
Complete C, Fortran 2003, Python 3, Julia, and Java 22 source code • 23 Hershey vector fonts & TrueType engine • 35+ production-ready examples • 230-page manual
Instant digital download • Free 2D Community Edition with zero fees • Professional edition via Lemon Squeezy secure checkout
Get started immediately at zero cost. The free 2D Community Edition provides core 2D Cartesian plotting, linear/log axes, error bars, bar charts, polygons, and SVG export with auto-cropping across all five languages: C/C++, Modern Fortran 2003+, Python 3, Julia, and Java 22. Includes outline Hershey fonts (Swiss & News) and native TrueType text engine (Unicode.ttf). Fully packaged with native Fortran Package Manager (fpm) support—build the entire library and run examples with a single command.
GraphiC vs. The Landscape: Modern Scientific Graphics Compared
How the modernized 2026 edition of GraphiC compares against Matplotlib, Gnuplot, MATLAB, OriginPro, DISLIN, PLplot, and Plotly across binary footprint, execution latency, polyglot language parity, and specialized scientific visualization.
1. Executive Overview: The Right Tool for the Job
In computational science, engineering simulations, and mission-critical automated pipelines, visualization tools fall into two divergent paradigms:
- Heavyweight, Interactive Desktop Environments (MATLAB, OriginPro, Tecplot): Feature-rich with extensive graphical user interfaces and thousands of analysis tools, but carry multi-gigabyte footprints, restrictive per-seat commercial licenses, and prohibitive cold-start latencies that make them unsuitable for autonomous microservices, HPC compute nodes, or embedded systems.
- Dynamic Language & Web Frameworks (Matplotlib, Plotly): Ubiquitous in interactive exploratory data science (Jupyter Notebooks, web dashboards), but burdened by massive dependency stacks (CPython, NumPy, FreeType, libpng, V8, Node.js, Chromium), slow process startup (500–1,500 ms), and lack of native binary linkage for compiled simulation codes written in C and Modern Fortran.
GraphiC occupies a unique, high-value tier: an ultra-lean, high-precision, self-contained scientific plotting engine with zero external runtime dependencies. Developed originally for high-performance scientific publication and modernized in 2026, GraphiC delivers sub-millisecond execution, true physical layout precision (inches/centimeters), pure algorithmic 3D hidden-surface removal with zero GPU/OpenGL prerequisites, and identical API semantics across C/C++, Modern Fortran 2003, Python 3, Julia (GraphiC.jl), and Java 22 (FFM).
2. Comprehensive Feature Matrix
3. In-Depth Comparative Analyses
GraphiC vs. Matplotlib (Python): The Burden of Runtime Overhead
Matplotlib is the standard for interactive ad-hoc data exploration in Jupyter Notebooks. However, when software architects attempt to use Matplotlib in high-throughput backend services, serverless execution (AWS Lambda), or automated high-performance computing (HPC) loops, its architectural limits quickly emerge:
- Cold-Start Lag & Footprint: Matplotlib requires between 500 ms and 1.5 seconds just to import its modules (due to Python bytecode parsing, CPython ABI loading, NumPy array initialization, and font cache indexing). GraphiC compiles into a single 655 KB static binary that executes from cold start in under 2 milliseconds.
- 3D Depth Sorting Artifacts: Matplotlib’s 3D engine (
mplot3d) relies on a simple Painter’s algorithm that sorts polygons by centroid distance. On overlapping or concave 3D mesh surfaces, it frequently produces visual rendering errors (triangles popping in front of nearer surfaces). GraphiC’s 3D algorithms (d3plot,surmat,surfun) utilize rigorous mathematical hidden-line horizon algorithms that guarantee mathematically correct occlusion without requiring a GPU. - Polyglot Deployment: Matplotlib cannot be natively linked into Fortran 2003 or C/C++ simulations without running an embedded CPython interpreter instance. GraphiC provides native, zero-overhead C and Fortran bindings alongside its idiomatic Python wrapper.
GraphiC vs. Gnuplot: In-Process Binary Linkage vs. Brittle Shell Scripting
Gnuplot has long been a favorite tool for rapid terminal plotting. Yet from a software engineering perspective, Gnuplot is a standalone executable, not an embeddable C/Fortran library:
- No In-Memory Pointer Passing: Integrating Gnuplot into a compiled C or Fortran simulation requires writing data to temporary disk files or piping formatted ASCII text across an OS subshell (e.g.
popen("gnuplot", "w")). This introduces serialization overhead, disk I/O bottlenecks, and shell-injection risks. - True Library Architecture: GraphiC functions (such as
curve(x, y, n, sym)orsurmat(z, nx, ny, ...)) receive your existing memory buffers directly by pointer or array descriptor. There is zero serialization, zero disk writing, and zero IPC overhead. - Deterministic Page Layout: Gnuplot manages layouts through terminal-specific commands. GraphiC operates strictly on physical paper dimensions (
page(8.5, 11),area2d(6.5, 4.5)in inches or cm), ensuring that multi-panel figures conform exactly to publisher specifications (IEEE, Nature, Elsevier).
GraphiC vs. MATLAB & OriginPro: Enterprise Agility vs. Proprietary Monoliths
MATLAB and OriginPro excel at interactive desktop exploratory plotting with hundreds of point-and-click dialogs. However, for automated production pipelines:
- Licensing & Cost Barriers: Running MATLAB on a cluster of 500 cloud workers requires exorbitant MATLAB Production Server licenses or massive Compiler Runtime containers (~4 GB each). With GraphiC's $295 single-user perpetual license, you compile directly into your own executables and run batch jobs across your own workstations or cloud nodes without license servers or per-core metering. (Commercial redistribution in products sold or given to third parties requires a separate OEM agreement with Scientific Endeavors Corporation.)
- Headless Architecture: OriginPro is tied to the Microsoft Windows desktop subsystem. GraphiC is 100% portable POSIX C, running headlessly on Alpine Linux, macOS (Apple Silicon & Intel), Windows, or supercomputing architectures with identical SVG vector output.
GraphiC vs. DISLIN & PLplot: Self-Contained Purity vs. Complex CMake & Driver Middleware
DISLIN and PLplot are the two best-known traditional scientific plotting libraries for compiled C and Fortran codes. While they share GraphiC's focus on compiled numerical performance, their software architecture introduces substantial maintenance overhead:
- Build & Dependency Complexity: PLplot relies on an intricate CMake configuration requiring numerous dynamic driver plugins (Cairo, Qt, wxWidgets, Xwin) and external shared libraries (
libpango,libcairo,libfreetype,libltdl). If a dynamic driver is missing or mismatched on a compute node, execution fails at runtime. DISLIN is distributed as closed-source precompiled binaries with separate downloads per compiler version. GraphiC is 100% self-contained standard C—drop the source into your code, build withmakeor Fortran Package Manager (fpm), and link with zero external packages. - 3D Hidden-Surface Quality: While PLplot and DISLIN support basic 3D meshes (
plmesh,plot3d), their hidden-surface routines struggle with complex, multi-valued, or high-density surfaces. GraphiC’s analytical upper/lower horizon algorithm performs exact line-segment clipping, guaranteeing mathematically exact hidden-line occlusion without hardware OpenGL or GPU drivers. - Modern Language Parity: PLplot uses SWIG wrapper layers for Python and Java, which often break across major language updates. GraphiC delivers clean, idiomatic Python C-extensions and modern Java 22 Foreign Function & Memory (FFM) bindings with zero JNI wrapper code.
GraphiC vs. Plotly: In-Situ Sub-Millisecond Vector Generation vs. 300 MB Headless Browser Stacks
Plotly is widely celebrated for interactive web dashboards and browser-based data science. However, when deployed in automated HPC simulation loops, headless microservices, or embedded telemetry:
- The Headless Browser Penalty: Plotly cannot natively render publication figures inside a compiled binary executable. To generate static vector output (SVG, PDF, EPS) headlessly, Plotly must spin up a background headless Chromium browser engine or the Kaleido daemon. This incurs a 1.0–3.0 second cold-start latency, consumes hundreds of megabytes of RAM, and creates a massive security surface in production containers. GraphiC emits publication-grade vector SVG directly to disk or stdout in under 2 milliseconds from pure C, Fortran, Python, or Java.
- Zero-Framework Web Interactivity: You do not need a bloated 3.5 MB JavaScript charting library to inspect plots interactively. Every SVG emitted by GraphiC is paired with an ultra-lightweight, zero-framework HTML5 viewer providing smooth pan, zoom, and coordinate inspection using pure browser-native DOM APIs.
4. The Architectural Pillars of GraphiC
Zero Runtime Dependencies
Compiles cleanly on 64-bit platforms with nothing more than standard C library headers and -lm. No external graphical toolkits, no X11/Wayland servers, and no external font engines required.
Dual-Engine Typography
Includes 23 built-in Hershey vector stroke fonts (Simplex, Complex, Triplex, Gothic, Math, Astronomy, Dot-Matrix) plus an integrated TrueType (.ttf) quadratic B-spline tessellator with outline caching.
RF & Chemical Specialization
Native support for RF Smith transmission charts (impedance & admittance circles), ternary mixture phase diagrams (trimat, trifun), 3D column bars (d3bars), and vector quiver fields (vfield).
Polyglot First-Class Parity
The exact same API across C99/C11/C23, Modern Fortran 2003/2018, Python 3 (with Jupyter Notebook inline SVG support), Julia (with GraphiC.jl zero-overhead ccall bindings), and Java 22 FFM. Write in your team’s preferred language with zero feature divergence.
5. Polyglot Parity in Action
Compare how simple, clean, and consistent GraphiC code remains across all 5 supported environments. Each produces an identical, high-precision vector SVG figure:
#include <graphic.h>
\n#include <math.h>
\n
\nint main(void) {
\n float x[100], y[100];
\n for (int i = 0; i < 100; i++) {
\n x[i] = i * 0.1f;
\n y[i] = sinf(x[i]);
\n }
\n bgnplot(1, 'g', "wave.tkf");
\n startplot(WHITE);
\n page(8.0f, 6.0f);
\n area2d(6.5f, 4.5f);
\n color(BLACK); box();
\n heading("Harmonic Oscillation");
\n graf("%g", 0.0f, 2.0f, 10.0f,
\n "%g", -1.5f, 0.5f, 1.5f);
\n color(BLUE);
\n curve(x, y, 100, 0);
\n endplot(); stopplot();
\n return 0;
\n}program wave_demo
\n use graphic_iso
\n implicit none
\n real(c_float) :: x(100), y(100)
\n integer :: i
\n
\n do i = 1, 100
\n x(i) = real(i - 1) * 0.1
\n y(i) = sin(x(i))
\n end do
\n call bgnplot(1, 103, "wave.tkf")
\n call startplot(WHITE)
\n call page(8.0, 6.0)
\n call area2d(6.5, 4.5)
\n call color(BLACK); call box()
\n call heading("Harmonic Oscillation")
\n call graf("%g", 0.0, 2.0, 10.0, &
\n "%g", -1.5, 0.5, 1.5)
\n call color(BLUE)
\n call curve(x, y, 100, 0)
\n call endplot(); call stopplot()
\nend program wave_demofpm build • fpm run --example sampleimport math
\nfrom graphic import Figure, BLUE, SOLID
\n
\nx = [i * 0.1 for i in range(100)]
\ny = [math.sin(v) for v in x]
\n
\nwith Figure(8.0, 6.0, tkf_name="wave.tkf") as fig:
\n fig.setup_axes(0.0, 2.0, 10.0,
\n -1.5, 0.5, 1.5)
\n fig.title("Harmonic Oscillation")
\n fig.xlabel("Time (s)")
\n fig.ylabel("Amplitude (V)")
\n fig.plot(x, y, color="blue")
\n fig.save("wave.svg")
\nimport com.sciend.graphic.*;
\n
\npublic class WaveDemo {
\n public static void main(String[] args) {
\n float[] x = new float[100];
\n float[] y = new float[100];
\n for (int i = 0; i < 100; i++) {
\n x[i] = i * 0.1f;
\n y[i] = (float) Math.sin(x[i]);
\n }
\n try (Figure fig = new Figure(8.0f, 6.0f,
\n Color.WHITE, "wave.tkf")) {
\n fig.setupAxes(0f, 2f, 10f,
\n -1.5f, 0.5f, 1.5f);
\n fig.title("Harmonic Oscillation");
\n fig.plot(x, y, Color.BLUE, LineStyle.SOLID);
\n fig.save("wave.svg");
\n }
\n }
\n}using GraphiC
\nx = range(0.0, 10.0, length=100)
\ny = sin.(x)
\n
\n# 1-Line Idiomatic High-Level Plotting (Sub-millisecond execution):
\nfig = GraphiC.plot(x, y; title="Harmonic Oscillation", xlabel="Time (s)", ylabel="Amplitude (V)", color=:blue)
\nGraphiC.plot!(fig, x, cos.(x); label="cos(x)", color=:red, ltype=:dashed)
\nGraphiC.savefig(fig, "wave.svg")
\n
\n# Makie.jl Dedicated Vector Backend (Analytic 3D Hidden-Line Removal):
\n# using Makie; import GraphiC: graphic_makie; graphic_makie()
\n# fig, ax, plt = lines(x, y; color=:blue, linewidth=2)
\n# surface!(Axis3(Figure()[1,1]), x, y, [sin(sqrt(xi^2+yi^2)) for xi in x, yi in y]; colormap=:viridis)
\n# save("makie_plot.svg", fig)
\n
\n# Plots.jl Metapackage Backend:
\n# using Plots; import GraphiC: graphic; graphic()
\n# p = plot(x, y, label="sin(x)", color=:blue); savefig(p, "plots_output.svg")using GraphiC • Zero compilation latency • Dedicated Makie.jl & Plots.jl vector backendsWhen Should You Choose GraphiC?
GraphiC is the ideal solution if your project requires:
\n
Get Started with GraphiC Today
Download the free 2D Community Edition to test with your own pipelines, or upgrade to GraphiC Professional 2026 for full 3D surfaces, contours, and Smith charts.
Add new comment