Notes on using the gnuplot canvas terminal driver to create web pages ===================================================================== 1) Using UTF-8 characters in your plots I expect that eventually web browsers will learn to draw text onto the HTML canvas element using their native font-handling code. But until then we have to refer to an external character drawing library. The gnuplot package includes two versions of a script to draw characters on the canvas. The first one, canvastext.js, was written by Jim Studt. It only knows about the 7-bit ascii characters. The second one, canvasmath.js, is an expanded version of Jim Studt's script that I wrote to handle UTF8. It contains glyphs for the first two unicode code pages (latin-1), the greek alphabet, and select math and physics symbols. You can use this to replace canvastext.js if you like, or refer to it explicitly in plots that need non-ascii characters. 2) Browser dependencies As of this time (May 2009) the HTML canvas element is supported by the latest versions of Opera, Safari, Firefox, and Konqueror. However, each of these has quirks. For instance, only Firefox makes it easy to click and drag with the middle or right mouse buttons; the other browsers try to pop up various menus instead. We try to override this, but it doesn't always work. Conversely, Opera and Safari make it easy to use hot keys ('e' for refresh, 'r' to toggle the ruler, etc), but I have not managed to get this to work in Firefox. If you run into problems, please try several browsers before concluding that it is a gnuplot problem. If you figure out a work-around for one of these browser quirks, please tell me so that we can try to incorporate into gnuplot output. 3) Creating a basic web page with a single mouseable plot The canvas terminal driver itself will create a basic html document containing a mousable plot. The command options to do this are set term canvas standalone mousing jsdir "http://myserver" set output 'myplot.html' This document contains - a reference to style sheet gnuplot_mouse.css - a reference to support script gnuplot_mouse.js - a javascript function named 'gnuplot_canvas' - a canvas element named 'gnuplot_canvas' that will be drawn in by the javascript function of the same name - an html table containing the readout for mouse coordinates, as well as clickable icons for additional mousing operations The *.css and *.js references point back to whatever source URL you specified in the jsdir option to the 'set term' command. For example: <link type="text/css" href="http://myserver/gnuplot_mouse.css" rel="stylesheet"> In order for viewers to use your plot document, they must be able to access the *.css and *.js files via the URL embedded in the document. 4) Creating a web page with multiple mouseable plots In order to embed multiple plots in a single document, you must provide your own html framework. You can use the one created by the canvas driver in standalone mode as a starting point, including the references to gnuplot_mouse.css and gnuplot_mouse.js. However, instead of a single javascript routine named gnuplot_canvas() that always draws the same plot, you must provide a wrapper routine with the same name that connects the mousing code to whichever plot is currently active. Here is an example: - create the individual plots as separate javascript files set term canvas name 'plot1' set output 'plot1.js' plot something set term canvas name 'plot2' set output 'plot2.js' plot something_else - create your html wrapper, including a script block such as the one below. You must use these specific variable names, as they are referenced by the javascript code produced by the canvas terminal. <script type="text/javascript"> var canvas, ctx; var grid_lines = true; var zoomed = false; var active_plot_name = "gnuplot_canvas"; var active_plot = dummyplot; function dummyplot() {}; function gnuplot_canvas( plot ) { active_plot(); }; </script> - add one or more mousing output tables. As a model, you can use either the one in a standalone plot or the file .../demo/html/mousebox.template. The table id and text span ids in the "mousebox" table must match the ones by your individual plots in order for mousing readout to work. - each of the individual plots in the document should be explicitly called when the document is loaded. For example, for each plot there could be a block of html similar to the following: <canvas id="plot1" width="600" height="400" tabindex="0"></canvas> <script src="plot1.js"></script> <script> if (window.attachEvent) {window.attachEvent('onload', plot1);} else if (window.addEventListener) {window.addEventListener('load', plot1, false);} </script> Alternatively, the onload attributes could be set in the html <BODY> element - Ethan A Merritt (sfeam@users.sourceforge.net) May 2009