Increase allowed recursion depth
set contourfill defined [zmin1:zmax1] color1, [zmin2:zmax2] color, ...
remove flush_binary() (used only by VMS)
remove DEC-specific binary constants
Remove VMS-specific code
replace usleep with nanosleep
docs: update description of backslash as a line-continuation
ignore trailing whitespace on input command lines
Plot title is not initialized correctly following a plot with no valid data
Fixed in 6.1 Queued for 6.0.5
Rework the logic for extending gp_input_line incrementally on input
previous plot title must always be cleared when a new plot is started
Plot title is not initialized correctly following a plot with no valid data
Plot title is not initialized correctly following a plot with no valid data
Plot title is not initialized correctly following a plot with no valid data
docs: update indication of features that have been backported to 6.0
WASI platform support - documentation
initialization of axis tic settings after "set nonlinear"
code readability: use hypot(x,y)
EUCJP encoding - avoid explicit "set encoding EUC_JP" in saved output
Yes, the behavior has changed since version 5. User feedback (a.k.a. "bug reports") suggested revisions to the empirical rules for log tic placement. See in particular the discussion attached to Bug #2717 https://sourceforge.net/p/gnuplot/bugs/2717/ Some users feel strongly that there must be at least three major (i.e. labeled) tic marks in order to make it immediately apparent that the axis is log-scaled. The output from 5.4 on plot #2 has only two labeled tic marks. In this particular case close...
logscale issue in tics
This behavior is different from that in the previous version (at least v5.4 as I used before, see the right panel of the figure attached). "ytics" ignored the "logscale" parameter - the tic interval was supposed to be interpreted as a multiplicative factor rather than a constant. Would like to clarify if this is a new feature or a bug? Thanks! gnuplot> set log y gnuplot> set yrange [5:1e2] gnuplot> set ytics 10,10,1e3 logscale gnuplot> set mytics 10 gnuplot> p x
Both plots show log scaling on y. The difference you notice is probably the choice of where to place major tics (labeled) vs minor tics (unlabeled). The program tries to choose a reasonable set of major and minor axis tics based on the total range. When placing log scaled major tics it currently uses heuristics like "there must be at least 3 but preferably not more than 10 major tics; do not place more than 10 minor tics between major tics; if the range would hold only 1 major tic promote the minor...
logscale issue in tics
update NEWS
parametric mode is incompatible with axis range sampling
"unset warnings" should suppress axis range warning
docs: Expand section on sum[]<expr> operator to also describe prod[]<expr>
New function prod [<var> = <start> : <end>] <expression>
checking for plot title should not consume "noenhanced"
wxt, x11: reduce flicker during multiplot or animation
allow "string"[i] as shorthand for "string"[i:i]
wrap the lines of a datablock (or function block) in a structure
docs: documentation for new gprintf formats %C and %Ci
revisit escape sequences (documentation)
revisit escape sequences (UTF-8)
revisit escape sequences (octal)
Expand unicode escape sequences in string functions strstrt and strlen
Expand unicode escape sequnces during substring evaluation
expand Unicode escape sequences \U+xxxx in "noenhanced" strings
limit the length of axis tickmarks after "set view map; set isotropic"
move check for "palette <colormap-name>" from lp_parse to parse_colorspec
emf svg: remove references to old terminal option {dashed|solid}
Full dashtype support for libgd terminals and improved antialiasing quality
Got it. Thanks very much.
Windows tempfile support broken by typos in datablock.c
gd: antialiased thick lines, dash patterns, and transparent line support
Hi @sfeam I have attached a patch to gd.trm that adds a short description. It also includes my e-mail address, but feel free to remove it or list it exclusively if this otherwise collides with the aesthetics of the comment block. As overall commit message, I would suggest the following, but feel free to adapt it to your preferred length. I have not included new lines in the paragraphs intentionally, so you can conveniently add them were you want them. gd terminal: antialiased thick lines, dash patterns,...
new demo: cerfi.dem
docs: clarify that erfi(x) is a real-valed function of a real variable
add config.guess config.sub to .gitignore
I am truly impressed by the quality of the output. Let's go with this version. Could you provide one more patch to apply on top of this to give yourself credit at the top of gd.trm for this major revision (a line or two to summary the work very briefly)? Also it would be nice if you provide an overall description to use as a commit message when I add it to the git repository. I could write something myself but you obviously know better than I do how to properly describe it. What should the author...
Update and patch: Looking at the graphs above it was clear that something was wrong with the disk/clipped-disk (depending on the endcaps) join rendering at positions with high curvature in the sinc curves (mainly at the bottom part of the valleys). This had nothing to do with the empty-canvas rendering patch I was testing but came down to a bug in the original patch where I used integer pixel coordinate instead of pixel centers in PNG_draw_join_disc. Also, there was another bug in PNG_draw_join_disc...
Update and patch: Looking at the graphs above it was clear that something was wrong with the disk/clipped-disk (depending on the endcaps) join rendering at positions with high curvature in the sinc curves (mainly at the bottom part of the valleys). This had nothing to do with the empty-canvas rendering patch I was testing but came down to a bug in the original patch where I used integer pixel coordinate instead of pixel centers in PNG_draw_join_disc. Also, there was another bug in PNG_draw_join_disc...
yrange ignored in parametric mode
Hi @sfeam just wanted to tell you that I have a working solution for the transparency issue that uses the approach of rendering each line to a blank canvas that you have proposed. I will benchmark this again and check all the demo scripts for any regressions. If all goes well, I should be able to post a patch here soon. Attached is a test script for transparent lines and it's output.
parametric mode is incompatible with axis range sampling
Yes there have been problems with thick lines all along. Left to itself, libgd does a really poor job with them. So gnuplot draws a thick line by filling a circular area around each point along the line. This is done by drawing the line with gdImageSetBrush() and a brush constructed to be the width requested for the line. And, as you say, this causes transparent thick lines to be way less transparent than requested because every single point leads to overlaps. So yes there is extra darkening at points...
My bad, I wasn't aware that one could even choose the alpha value for line colors in Gnuplot, but apparently, this was implemented quite some time ago. I will see if I can come up with a solution for that. Your suggestion of redering everything on a blank canvas sounds reasonable. As a side note: Didn't the old libgd terminal also have this issue, at least with thick lines where overlaps should have happened before when rendering the segments?
yrange ignored in parametric mode
No need to attach output. It's actually easier for me to test with kittycairo vs kittygd. That way I can run a test in side-by-side windows to compare the png and gd output rather than collecting and pairing up separate output files for display. I'll probably apply this version after going over the code to see if there's anything that can be tightened up or abstracted. The quality of the output is very good, with one exception that is not a deal-breaker. The algorithm used here has the imperfection...
If you are interested, I can upload the output of the demo scripts for the terminals: png (with patch), png (original) and pngcairo, but it would be quite large.
gnuplot 6.0.4 ignores unset warnings
Thanks. There's a fix already in 6.1 and queued for 6.0.next
I think I figured it out, here would be a patch: diff -Naur gnuplot-6.0.4_orig/src/axis.c gnuplot-6.0.4_patched/src/axis.c --- gnuplot-6.0.4_orig/src/axis.c 2025-11-30 23:15:20.000000000 +0100 +++ gnuplot-6.0.4_patched/src/axis.c 2026-03-13 20:03:47.739548000 +0100 @@ -433,17 +433,21 @@ double widen = (dmax == 0.0) ? FIXUP_RANGE__WIDEN_ZERO_ABS : FIXUP_RANGE__WIDEN_NONZERO_REL * fabs(dmax); - if (!(axis == FIRST_Z_AXIS && !mesg)) /* set view map */ - fprintf(stderr, "Warning: empty %s range [%g:%g],...
I think I figured it out, here would a patch: diff -Naur gnuplot-6.0.4_orig/src/axis.c gnuplot-6.0.4_patched/src/axis.c --- gnuplot-6.0.4_orig/src/axis.c 2025-11-30 23:15:20.000000000 +0100 +++ gnuplot-6.0.4_patched/src/axis.c 2026-03-13 20:03:47.739548000 +0100 @@ -433,17 +433,21 @@ double widen = (dmax == 0.0) ? FIXUP_RANGE__WIDEN_ZERO_ABS : FIXUP_RANGE__WIDEN_NONZERO_REL * fabs(dmax); - if (!(axis == FIRST_Z_AXIS && !mesg)) /* set view map */ - fprintf(stderr, "Warning: empty %s range [%g:%g],...
Dumb terminal doesn't show all data
As you say, increasing the range shows that in fact all 8 points are present. Since auto-scaling uses the extreme point coordinates to define the border, and the border of the plot is by default drawn after the points, it covers the two points with extreme coordinates. Try again with set border back to confirm.
Dumb terminal doesn't show all data
epslatex terminal: tick labels contain LaTeX math but not enclosed in dollar signs
Thanks for the info, I'll go back and fix up the code which generated that Gnuplot script. I've marked this ticket as "not a bug" accordingly.
The problem arises because your test script explicitly sets the tic format to '%h', but this is not correct for latex terminals. Here is the guidance from help set format: The length of the format string is restricted to 100 characters. The default format is "% h", except that LaTeX terminals use "$%h$". You can modify this to provide units or a different numeric format, for example 'set xtics format "%.2f MHz"'. "set format" with no following string will restore the default. I grant you that this...
"unset warnings" should suppress axis range warning
Nice test figures!
epslatex terminal: tick labels contain LaTeX math but not enclosed in dollar signs
Most, but not all, of the warnings issued by gnuplot were sent by a shared subroutine. The "unset warnings" command silences that shared mechanism. That leaves a few [a quick-and-dirty "grep" of the source tree finds about thirty] places in the source code that print the warning directly rather than going through the shared subroutine. Some of these should probably never by silenced, like the ones from the stats and fit commands that tell you the calculation was invalid or highly unreliable. Others,...
gnuplot 6.0.4 ignores unset warnings
Update After a minor tweak to gnuplot's svg/domterm terminal driver, I can now run the WASI/WASM gnuplot executable by invoking wasmtime inside qtdomterm. See https://domterm.org/ and (somewhat old) https://opensource.com/article/18/1/domterminal. Domterm intercepts the SVG output and then renders it inside the widget. This gets me full graphics, fonts, etc., in a Qt widget. It's great. Screenshot attached. Here's what I don't understand, though. It also makes the history and readline functions work....
svg: do not emit [CDATA] sections to generic svg output
libstbi image-handling configuration
I have committed your original patchset and then committed a small modification to move the tempfile handling into a set of macros in syscfg.h rather than cluttering up the primary code with tests for #ifdef __wasi__. They also fix a memory leak that would have happened if an error is encountered while a tempfile is open. After a bit of fumbling I got the wasi-sdk installed and used that for testing. The only real problem I had is that I don't understand the mechanism for granting permission to access...
WASI platform support - minor cleanup
WASI platform support - new configure option and support code
reject filenames beginning with "|" if popen is not supported
Indeed, making fmemopen and open_memstream optional would be better. open_memstream creates a write-only stream, so I reopen the buffer with fmemopen to read from it. fmemopen can also be used for writing, but it requires a fixed-size buffer compared to open_memstream. From what I can see in Qt's docs, Qt for WebAssembly is essentially Qt for Emscripten and is designed to run in browsers. WASI's graphics APIs are still in an early stage, and no mainstream runtime supports them, unlike Emscripten,...
avoid nit-picky compiler warnings
Another question: Is there a reason you use the sequence fclose(fp); fp = fmemopen(fbuf, fbuf_len, "r"); rather than simply rewind(fp);? The documentation says fseek is usable after open_memstream(), and rewind is documented as being equivalent to fseek(stream, 0L, SEEK_SET). Allowing the code to use rewind(fp) further simplifies the change and works for me in testing (not on WASI yet).
PS: I can upload the output of the demo scripts as well, but that is 174 MB. Not sure if this is the right place.
Attachments here:
Hi @sfeam ! As promised, I have now tested and benchmarked my patch thoroughly and am confident to post it here again. The main issue I had to fight with was the fact the the integer resolution used in gd.trm was not sufficient to produce properly curve-aligned thick line-pieces. I had to use a similar approach to what is done in pngcairo to get around this, namely oversampling the coordinate space to increase the resolution for rendering and AA calculations in gd.trm. I have tested this against...
Now that I've looked at the patch, I wonder if 99% of it could be respun as "optional support for using memory-backed scratch space viafmemopen and open_memstream rather than using tempfiles. That seems like a perfectly reasonable option in any case, and it might then simplify WASI support into something like "you must select this option during configuration". Do I have that right? Thanks for the session output video. That gives me an idea of what you ended up with and what is missing. As to terminal...
wasi-sdk would be a good start, rather than installing another distro. It is a prebuilt bundle providing latest clang, wasi-libc and wasi-compiler-rt. I don't have much experience in Emscripten, but from what I know, Emscripten and WASI are two platforms (wasm32-emscripten and wasm32-wasi for compilers), providing different libc for Wasm. Wasm is more like a common architecture. WASI is also a set of system APIs designed to make more apps run anywhere including browsers/machines/servers. It provides...
I am potentially very interested in this, but I am very much not up to speed on the wasm ecosystem. Furthermore so far as I can tell, the linux systems I normally work on do not provide any of the relevant support packages, so I am at least one or two major steps away from being able to try this out. Maybe you can provide some guidance... Would it be more reasonable to work from the GitHub repository code and build it up the clang/wasm/wasi development tools from scratch or to start by installing...
Add WASI platform support
Fails to build with lua 5.5
lua terminals: lua version 5.5 treats loop variables as read-only
Do not include the built-in colormaps in the output from "save"
lua terminals: lua version 5.5 treats loop variables as read-only
So, it appers that there may have been a fix made to texlive. I'm no longer seeing this failure.