Gnuplot: Alternating colors in fenceplots - colors

I want to to plot a fenceplot with alternating fence colors. In this case I want black and grey. I used the following code:
splot for [i=0:300:25] "fenceplot.csv" index i u 1:2:3 w lines
The number of fences defined in my data file is dynamic and is usually between 250-350 fences.

Because the variable i changes by 25 between subsequent curves you can decide which color to use for a given line by testing whether i is even or odd:
set style line 1 linecolor "black"
set style line 2 linecolor "grey"
splot for [i=0:300:25] "fenceplot.csv" index i u 1:2:3 w lines linestyle 1+i%2
Slightly more robust would be
splot for [i=0:12] "fenceplot.csv" index i*25 u 1:2:3 w lines linestyle 1+i%2
because then you can also replace 25 by an even number.

Related

setting the linewidth in gnuplot when the color is given by a 4th axis

To plot 3D data xyz with the color given by a 4th variable I can use the command
splot 'au' u 1:2:3:4 linecolor palette with lines
where au is a file containing 4 columns of data.
If I try to adjust the width of the line to make it easier to see it gives the error below. What it the correct way to set the line width when taking colour from a palate given by a 4th axis
gnuplot> splot 'au' u 1:2:3:6 linecolor palette with lines lw 2
^
duplicated or contradicting arguments in plot options
Line properties must all come next to each other in the plot command; you can't stick something else (in this case with lines) in the middle. Use either
splot 'au' u 1:2:3:6 linecolor palette lw 2 with lines
or
splot 'au' u 1:2:3:6 with lines linecolor palette lw 2

Gnuplot: variable linecolor for 3D-Vector plots

In 2D plots, it is no problem to use 4th column for supplying coloring of arrows in a vector-style plot:
set parametric
set trange [0:2*pi]
plot '+' using (cos($1)):(sin($1)):(0):(1):($1) w vectors lc palette
works as expected. However, if I pass to 3D-plots,
splot '+' using (cos($1)):(sin($1)):(0):(0):(1):(0):($1) w vectors lc palette
yields only black arrows, although the colorbox shows a realistic cbrange. Other colored 3D-plots such as
splot '+' using (cos($1)):(sin($1)):(0):(sprintf("%.2f", $1)):($1) w labels tc palette
also work as expected.
Question: Why is this?
*Gnuplot version: 5.0 patchlevel 3.

plotting two histograms, one w/ and one w/o error bars in one plot

I have the below script, which works fine when I have a third column in the second data set. Now I want to get the first histogram being drawn w/ error bars, and the second w/o. I can remove the :3 from the second plot command but gnuplot will complain about not enough data specified for the second histogram. If I remove set style histogram errorbars ... but that would disable the error bars on the first histogram, too. Is there a way to plot two histograms in the same figure, where one doesn't have error bars.
set xlabel ""
set ylabel ""
set boxwidth 0.9 absolute
set style fill solid 1.00 border -1
set style histogram errorbars gap 1
set style data histograms
set yrange [-1.746917959031165368e-01:3.668527713965446857e+00]
unset key
set datafile commentschar "#"
plot '-' using 2:3:xtic(1) title "onehist",\
'-' using 2:3:xtic(1) title "otherhist"
-3.583733737468719482e-01 1.073847990483045578e-02 1.073847990483045578e-02
-3.382162153720855713e-01 2.274234220385551453e-02 1.329828426241874695e-02
2.261839509010314941e-01 2.859487235546112061e-01 8.173441886901855469e-02
e
-1.164875924587249756e-01 4.266476333141326904e-01
-9.633044153451919556e-02 5.953223109245300293e-01
-7.617329061031341553e-02 6.151663661003112793e-01
-5.601614341139793396e-02 9.624376893043518066e-01
e
I'm not sure if it is possible to do this generally, but you can draw your histograms without the errorbars and then add them afterwards with an additional plot command.
plot '-' using 2:xtic(1) title 'onehist',\
'-' using ($0-0.2):2:3 with yerrorbars lc 'black' pt 0, \
'-' using 2:xtic(1) title 'otherhist',\
I'm not entirely sure how to determine the range of the actual bars, so the error bars are not perfectly centered, but this will place them on your graph as requested.
The additional command uses the yerrorbars style (which is how the histogram bars are drawn) to draw the error bars.
However, this isn't the best way to draw histograms. Gnuplot will treat the x-axis as a category with values 0, 1, 2, 3, etc. Therefore, even though you have different x values in both of your lists above, they will become superimposed over each other (and the second plot will change the x-axis values set by the first).
For your example, I would recommend using the boxes and boxerrorbars style.
set style fill solid
set boxwidth 0.01
plot '-' using 1:2:3 with boxerrorbars, '-' u 1:2 with boxes
or if you need the error bars to be a different color, draw them separately
plot '-' using 1:2 with boxes,\
'-' using 1:2:3 with yerrorbars lc 'black' pt 0,\
'-' u 1:2 with boxes

How to make this gnuplot diagram

This is my gnuplot digram. My digram is this:
I want to create this one:
From each point on the line. create a line to X and Y:
Change the color of the points to another thing than red.
This is my plot script:
set terminal png size 900,600 enhanced font "Helvetica,20"
set output 'All recived Packet in the network per second.png'
set grid
set xlabel "Transmision Range"
set ylabel "All of recived Packet in the network per second"
set title "Recive Packet pre second"
plot "NumOfRcvPkt.dat" using 2:3 title 'Transmision Range' with linespoints
Also here is the content of NumOfRcvPkt.dat file:
0 15 124
1 20 105
2 25 82
This is achieved as follows:
xmin=14 ; ymin=80
set xrange [xmin:*] ; set yrange [ymin:*]
plot "data" u 2:3 w l lc rgb "red", \
"" u 2:3 w p pt 7 lc rgb "blue", \
"" u (xmin):3:($2-xmin):(0) w vectors nohead lt 2 lc rgb "black", \
"" u 2:(ymin):(0):($3-ymin) w vectors nohead lt 2 lc rgb "black"
The first two lines set the ranges. This is important because you need to know where the edges lie in order to draw your black dashed lines.
Then, for the plot command, the first line plots the data with red lines, the second plots the data with blue circles, the third one plots horizontal black dashed lines and the fourth one plot vertical dashed lines. In order for your terminal to accept dashed styles (selected with lt 2) you need to add dashed, e.g. set term png dashed.
This is the result:

setting multiple labels at the top of the x-axis

After the answer got in my earlier post drawing vertical lines in between bezier curves, I have been trying to label the segments separated by the dotted lines. I used x2label but found out that if I use it multiple times then the data gets replaced though they are positioned in different places. Below is the script:
set term x11 persist
set title "Animation curves"
set xlabel "Time (secs.)"
set ylabel "Parameter"
set x2label "Phoneme1" offset -35
set pointsize 2
set key off
set style line 2 lt 0 lc 1 lw 2
plot [0.04:0.15] "curve.dat" u 1:2 smooth csplines ls 1, "" u 1:($2-0.2):(0):(0.3) w vectors nohead ls 2, \
"curve.dat" u 1:2 with points
The output is the following.
I want to label Phoneme1, Phoneme2...and so on.. on top of each segment. How would I do it? Also as I was suggested in my earlier post to play with the line "" u 1:($2-0.2):(0):(0.3) w vectors nohead ls 2 to get a top to bottom vertical lines. But that also did not work. How do I get the lines from top margin to bottom? Thank you.
The horizontal lines
The horizontal lines can be accomplished with setting the yrange to an explicit value. Otherwise gnuplot would try to get some space between the lines and the axis. You could choose the values
set yrange [0.3:1.2]
Then you simply modify the vector using directions like so:
"" u 1:(0.3):(0):(1.2) w vectors nohead ls 2
(see below for the complete script)
The labeling of the sections
A quick way of doing this with your set of data would be this:
set key off
set style line 2 lt 0 lc 1 lw 2
set yrange [0.3:1.2]
plot [0.04:0.15] "Data.csv" u 1:2 smooth csplines ls 1, \
"" u 1:(0.3):(0):(1.2) w vectors nohead ls 2, \
"" u ($1+0.005):(1):(sprintf("P %d", $0)) w labels
However, this will probably not look the way you want it to look. You could think of modifying your data file to also include some information about the labeling like:
#x-value y-value x-label y-label label
0.06 0.694821399177 0.65 0.1 Phoneme1
0.07 0.543022222222 0.75 0.1 Phoneme2
Then the labels line would simply look like:
"" u 3:4:5 w labels
The complete plot then looks like this:

Resources