Histogram and any curve on the same plot in Gnuplot - gnuplot

Can anyone help me or give me some tips how to create histogram and curve on same plot? When I try to do it, gnuplot is plotting a histogram or a curve, but not both of them.
This is code I used:
#!/usr/bin/gnuplot -persist
f(x)=99*0.03*(1/(0.062*sqrt(2*pi)))*exp(-((x-1.28)**2)/(2*(0.062**2)))
set xrange [1:1.43]
set yrange [0:25] noreverse nowriteback
plot f(x)
set boxwidth 2 absolute
set style fill solid 1.00 border lt -1
set style histogram clustered gap 1 title offset character 0, 0, 0
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror offset character 0, 0, 0
set xtics norangelimit
set xtics ()
i = 23
replot 'histogram1.txt' using 2:xtic(1)
set output 'histogram1.png' `

Not having the data set you are plotting, I must guess how the final result should look like...
When plotting histograms, gnuplot implicitely places the boxes at integer x-values, starting at 0, and with custom xtics, when having using 2:xtic(1). You set the xrange to [1:1.43] to plot your function properly. Probably you want to plot with boxes to get it right.
Try:
f(x)=99*0.03*(1/(0.062*sqrt(2*pi)))*exp(-((x-1.28)**2)/(2*(0.062**2)))
set xrange [1:1.43]
set yrange [0:25]
set boxwidth 0.8 relative
set style fill solid 1.00 border lt -1
set datafile missing '-'
plot f(x), 'histogram1.txt' using 1:2 with boxes

Related

Gnuplot: set angular grid limits in polar plot

I am trying to make a wedge-shaped plot in polar coordinates spanning from 0 to 60 degrees. Something like the following figure: Wedge-plot I want
However, the command "trange" is used for the range of the plot, not of the grid itself, and I always end up with the full-circle grid, like this: Same plot but with full grid.
Is there a simple command to set the limits in the angle variable? Here is the code I used to plot the former figure in gnuplot 5.2
set terminal pngcairo enhanced font "arial,10" fontscale 1.0 size 600, 400
set output 'polar1.png'
unset key
set border 4096 lt black linewidth 1.000 dashtype solid
unset xtics
unset ytics
set size ratio 1 1,1
set raxis
set ttics 0.00000,30 font ":Italic"
set polar
set grid polar 30.0000 lw 1.5
plot cos(4*t) lt 3 lw 2
Thank you in advance!
I guess there is no "intended" way to limit the maximum angle in a polar plot.
So, there is a simpler (but ugly) workaround, which simply covers the unwanted part by a filled polygon.
Note: There will be an issue if your rmax is not an integer multiple of rtic 0.2, i.e. a plot with rmax=1.05 will not look as desired. Therefore, as a workaround an extra rtic at rmax is added.
Script:
### plot only part of polar plot
reset session
rmax = 1.05
amax = 60
set polar
set rrange [0:rmax]
set rtics 0.2 scale 0.5
set rtics add ('' rmax)
set grid r polar 10 lt black lw .3
set trange [0:2*pi]
set ttics 0,10 format "%g°" font ":Italic" scale 0.5,0.25 offset -1,0
set mttics 2
set xlabel "r-label"
set xrange [0:rmax]
unset xtics
set yrange [0:rmax]
unset ytics
set size square
set border 4096
set lmargin 0
set tmargin 0
unset title
unset key
set samples 300
set obj 1 polygon from graph 0,0 to first rmax*cos(pi/180*amax),rmax*sin(pi/180*amax) \
to first rmax*cos(pi/180*amax), screen 1.0 \
to first 0, screen 1 to screen 0,1 to screen 0,0 to graph 0,0 \
fc rgb 0xffffff fs solid 1.0 front
set arrow 1 from graph 0,0 to first rmax*cos(pi/180*amax),rmax*sin(pi/180*amax) lc "black" nohead front
plot cos(4*t) lt 3 lw 2
### end of script
Result:

How to move and manage overlapping of x ticks with axis in Gnuplot

I am trying to plot an inlet graph which is shown in Figure. Being an inlet graph it is needed to show x tics and y ticks of relatively big sizes for clear visibility. But when I increase the fonts as,
set xtics font ", 40"
tics overlaps with axis. I increased the plot size set term png size 1000, 1000 but still the issue persists. Kindly suggest if there is a way to move the tics below or to a desired position in graph.
Edit:
The gnuplot script looks like this,
set term png size 1000, 1000
set output "b_vs_N.png"
set style fill solid
set style circle radius 0.001
FIT_LIMIT=1.e-14
set yrange [0.15:0.25]
set style fill solid
set style circle radius 0.001
set xtics 10
set ytics 0.03
set border 15 back lw 6
set xtics font ", 40"
set ytics font ", 22"
set ylabel "b" enhanced font "1 {,40}"
set xlabel "N_i" font "1 {,40}"
set lmargin 12
set bmargin 4
set palette model HSV
set palette rgb 3,2,2
set palette maxcolors 12
set view map
AA(x)=a+b*x+c*x**2
fit AA(x) "data.txt" using 1:2 via c, b, a
plot "data.txt" using 1:2 lt 1 pt 11 ps 2.0 lc rgb "black" notitle, AA(x) w lines lw 2 lc rgb "sienna1" notitle
Your example is uncomplete without code and therefore difficult to reproduce. Please check help xtics. There is the option offset.
Maybe the following example helps to solve your issue.
In the example below no special offset seems to be necessary, i.e. offset 0,0, but you can shift and adjust the labels in x and y direction.
Code:
### tic label offset
reset session
set multiplot
plot sin(x)/x
set origin 0.07, 0.6
set size 0.3,0.3
set xrange [0:10]
set xtics 5 out font ",20" offset 0,0
plot x**2
unset multiplot
### end of code
Result:

Gnuplot parametric surface plot hidden3d / pm3d border problem

The last couple of hours I've been trying to produce an acceptable-looking plot of a 3D-Object. Now i'm totally stuck at somehow making Gnuplot draw the borders in respect to my 3D-object in a right way. The code I use is this:
reset
set term pngcairo enhanced size 800,600
set output "plot.png"
set grid xtics ytics ls 3 lw 1 lc rgb 'gray'
set xzeroaxis
set yzeroaxis
set samples 30,30
set isosamples 30,30
set style line 100 lt 5 lw 0.5 lc black
set palette gray
set cbrange [-1:1]
unset colorbox
set pm3d depthorder hidden3d implicit
set pm3d lighting primary 0.50 specular 0.6
set parametric
set urange [0:2*pi]
set vrange [0:2*pi]
set xrange [-3.1:3.1]
set yrange [-3.1:3.1]
set zrange [-1.1:1.1]
set xyplane at -1
set view 121,115
set xtics offset first 0,0, -0.1
set ytics offset first 0,0, -0.1
set ytics -2,1,2
set xtics -2,1,2
unset border
set border 4095 front lt black linewidth 2.000 dashtype solid
splot (2+cos(u))*cos(v),(2+cos(u))*sin(v),1*sin(v) lc rgb '#666666'
set output
If you plot that code it results in an image like this:
3D-Object Plot
As you can see the layering of Borders/Axes and Graph is somehow messed up. I spent some time playing around with different terminal types, or set border back / front / behind, or basically all the other options, but i could not succeed in making Gnuplot draw this the right way, which means, the borders surround my Object.
The only compromise solution i could find, is, if i choose certain different view-points Gnuplot gets it all right. But for the one i want the drawing does not work..
I would be very happy about any suggestions or hints!

Customizing gnuplot clustered histogram x-axis labels

I have a gnuplot script
set terminal qt size 850,500 enhanced font 'Verdana,12' persist
set boxwidth 0.9 absolute
set ylabel "Duration in milliseconds" #font "Arial 14"
set tics font "Monospaced,bold 14"
set style fill solid 1.00 border lt -1
set key inside right top vertical Right noreverse noenhanced autotitle nobox
set style histogram cluster gap 1 title textcolor lt -1
set minussign
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror rotate by -45 autojustify
set xtics norangelimit
set xtics ()
set title "Integer d-ary heap performance"
set yrange [0:*]
set style line 1 lt 1 lc rgb "#000000"
set style line 2 lt 2 lc rgb "green"
plot 'integer_heap_benchmark_dary.dat' using 2:xtic(1) linecolor rgb "#5555ff" title col, \
'' using 3:xtic(1) linecolor rgb "#f4dc42" title col, \
'' using 4:xtic(1) title col
which looks like this:
What I want to achieve is:
Move each x-axis label a little bit to the left so that it "points" to the center of each cluster,
Change the font and size of the x-axis labels.
I have put an effort to find the answers on my own, yet without any success.
Try something like
set tics font "Courier,24"
to set the font.
To center the labels, try something like
set xtics offset -3
You'll have to experiment with the values.

Gnuplot scatter with xticlabels and errorbars

I'm trying to do a scatter plot with Y error bars in GNUPLOT, in which the X axis are "names", not numbers.
I'm using this code:
#!/bin/sh
gnuplot -persist <<PLOT
set boxwidth 0.99 relative #ancho relativo de las barras
set border linewidth 1.5
set xlabel "xlabel" font "Verdana,18"
set xlabel offset 0,-1
#set xrange [-5:5]
set xtics font "Verdana,12"
set ylabel "ylabel" font "Verdana,18"
set ylabel offset -2,0
set yrange [-15:15]
set ytics font "Verdana,12"
set key at 4,4 font "Verdana,18"
set style line 1 lc rgb '#0060ad' pt 7 # circle
set xtics rotate by -45 #rota ángulo
plot "file.txt" using 0:2:3:xticlabels(1) with yerrorbars ls 1
quit
PLOT
As a bash script, and then the file.txt is:
Peter 3.06 0.5035
Charles 4.6576 0
Luis -13.1790 0
Where the third column is the Y error bar. However, data appears to initiate exactly in the Origin and not as usual when histogram is used...
Any clues to "shift" or set a range on X with non-numeric values?
Thank you in advance.
If you want to use autoscaling on the x-axis and just add some space to the right and left, then use set offset:
set yrange [-15:15]
set style line 1 lc rgb '#0060ad' pt 7 # circle
set xtics rotate by -45
set offset 0.5,0.5,0,0
plot "file.txt" using 0:2:3:xticlabels(1) with yerrorbars ls 1 notitle

Resources