plotgraphgnuplotdatapoint

Reducing number of datapoints when plotting in loglog scale in Gnuplot


I have a large dataset which I need to plot in loglog scale in Gnuplot, like this:

set log xy
plot 'A_1D_l0.25_L1024_r0.dat' u 1:($2-512)

LogLogPlot of my datapoints

Text file with the datapoints

Datapoints on the x axis are equally spaced, but because of the logscale they get very dense on the right part of the graph, and as a result the output file (I finally export it in .tex) gets very large. In linear scale, I would simply use the option every to reduce the number of points which get plotted. Is there a similar option for loglogscale, such that the plotted points appear equally spaced?

I am aware of a similar question which was raised a few years ago, but in my opinion the solution is unsatisfactory: plotted points are not equally spaced along the x-axis. I think this is a really unsophisticated problem which deserves a clearer solution.


Solution

  • If you really want to reduce the number of data to be plotted, you might consider the following script.

    s = 0.1           ### sampling interval in log scale
                      ###  (try 0.05 for more detail)
    
    c = log10(0.01)   ### a parameter used in sampler(x) 
                      ### which should be initialized by 
                      ### smaller value than any x in log scale
    
    sampler(x) = (x>0 && log10(x)>=c) ? (c=ceil(log10(x)/s+0.5)*s, x) : NaN
    
    set log xy
    set grid xtics
    plot 'A_1D_l0.25_L1024_r0.dat' using (sampler($1)):($2-512) with points pt 7 lt 1 notitle , \
         'A_1D_l0.25_L1024_r0.dat' using 1:($2-512) with lines lt 1 notitle
    

    This script samples the data in increments of roughly 0.1 on x-axis in log scale. It makes use of the property that points whose x value is evaluated as NaN in using are not drawn.

    enter image description here