How choose which column put on axis like label? - plot

I have a csv file like this:
10557,1925080,1236052,1210752,1182492
11254,3159084,2264460,2187584,2144416
11334,2348036,1540692,1504536,1458332
11456,1607704,993228,974676,960308
.....
I want create a chart with these data. I want use the first column as x-axes label, and put all other column like different line inside the chart. how can I do it?
This is my code
set terminal pngcairo enhanced font "arial,10" fontscale 2.0 size 1680, 1024
set size 1,1
set ylabel '[y]'
set xlabel '[FIRST COLUMN FROM CSV]'
set datafile separator ","
set autoscale fix
set key top left
set key box
set output 'Figure1.png'
plot \
"figure1.csv" using 2 w l linewidth 3 lc rgb "black" title "second colum", \
"figure1.csv" using 3 w l linewidth 3 lc rgb "black" title "third colum", \
"figure1.csv" using 4 w l linewidth 3 dashtype 2 title "fourth colum", \
"figure1.csv" using 5 w l linewidth 3 dashtype 5 title "fifth colum"

To get evenly spaced tics on the x-axis which get labelled with the values from the first column use xticlabels:
plot "figure.csv" using 0:2:xticlabels(1)

Related

How to fix xtics label overlapping in gnuplot

I'm using GNUPlot to draw the graph of five real-valued functions. I think it is easy to solve, but I am a beginner.
My x-axis has problems with its label. All the xtics numbers are overlapping, and I have no idea why.
My .plt plots 3 files: an .eps, an pb .eps and a .png. It receives a .100 file, which is 6 columns of numbers. The first column represents values for t and the other five columns represent values for each function at respective t.
My .plt file is:
reset
set terminal windows
set style line 1 lt 1 linewidth 3
set style line 2 lt 2 linewidth 3
set style line 3 lt 3 linewidth 3
set style line 4 lt 4 linewidth 3
set style line 5 lt 5 linewidth 3
set style line 6 lt 6 linewidth 3
set border linewidth 3
set xzeroaxis
set yzeroaxis
set xlabel '{/Helvetica-Oblique t (dias)}' enhanced font ',28'
set key center top
set key center right
set key top right
set key box
set tics scale 1.5
set grid ytics
set grid xtics
set xtics 0,250,3500
set ytics 0,0.1,1
set title 'Simulacao' font ',26'
set samples 100
plot "./fort.100" using 1:2 with lines title 'Ms' linestyle 1, \
"./fort.100" using 1:3 with lines title 'Mi' linestyle 2, \
"./fort.100" using 1:4 with lines title 'A ' linestyle 3, \
"./fort.100" using 1:5 with lines title 'H ' linestyle 4, \
"./fort.100" using 1:6 with lines title 'I ' linestyle 5
pause -1
set terminal postscript eps enhanced
set termoption enhanced
set output "xsol-pb.eps"
replot
set terminal postscript eps enhanced color font ',22'
set termoption enhanced
set output "xsol.eps"
replot
set terminal png giant size 900,600 enhanced
set termoption enhanced
set output "xsol.png"
replot
Link for my .eps graph:
How can I fix this problem?
I am also having a problem with the table, at the right top corner of the image. How to fix that?
Two possibilities to avoid "collisions" of data and key:
adjust your scale such that the curve is below the key, in your case e.g. set yrange[0:1.5]
shift the positon of your key, e.g. set key center right or set key at graph 0.8, graph 0.8. Check help key for more information.

how to improve the following gnu plot?

I have the following gnu plot:
# automobile_input.txt
#
set term png
set output "automobile.png"
#
# Fields in each record are separated by commas.
#
set datafile separator ","
set title "Price versus Curb weight"
set xlabel "Price in dollars"
set ylabel "Curb weight in pounds"
set grid
plot 'x' using 1:2
quit
x is a file containing numbers such as
1,2
0.5,4
etc.
I would like to make a few changes to this plot.
At the top of the plot there is "x using 1:2" and I would like to remove that.
Finally, the most important thing: I would like to add another file, y, in the same format, which will be also plotted on the same plot, only with a different sign and color (instead of pluses in red), for example, blue triangles. I would rather also the pluses be circles.
Omit the data series title by using notitle in your plot line. Adding another curve would be done like this:
plot 'x' using 1:2 notitle, \
'y' using 1:2 notitle
The data series points will adjust automagically. To manually specify the format, you might plot with something like this:
plot 'x' using 1:2 with points pointtype 6 linecolor rgb 'red' title "Data X", \
'y' using 1:2 with points pointtype 8 linecolor rgb 'blue' title "Data Y"
You'll usually see scripts online that abbreviate these command to look like:
plot 'x' w p pt 6 lc rgb 'red' title "Data X", \
'y' w p pt 8 lc rgb 'blue' title "Data Y"

generating one legend in multiplot and and placing it at the last column and last row

I am trying to arrange several plots with histograms in a multiplot mode.
I have successfully plotted them. (Please see the attached pic)
.
But I have a problem with plotting the legend (or key).
I want the legend to be at the middle of the last row and the most right column in the multiplot (please see the attached plot).
I have tried to plot the legend but no avail. To have a better understanding of what I did, I have provided the whole script on which I am working.
Hope I get some help to draw the legend and place that at last column and last row.
#!/usr/bin/gnuplot
#########################################################################################
set terminal postscript eps size 7.8,6.8 enhanced color font 'Helvetica,20'
set output 'yy_HB_all_Chap6_LYOsystems.eps'
#########################################################################################
set macro
labelFONT="font 'Helvetica,24'"
labelFONTin="font 'Helvetica,18'"
scaleFONT="font 'Helvetica,16'"
scaleFONTx="font 'Helvetica,15'"
keyFONT="font 'Helvetica,24'"
set key spacing 3.5 samplen 3 #keyFONT
#########################################################################################
set xtics #scaleFONT
set ytics #scaleFONT
set xlabel "Oxygen" #labelFONT
set ylabel "Hydrogen Bond" #labelFONT offset 2.2,0
#set label "Hydrogen Bonds" at -2.0,0.35 rotate by 90 right #labelFONT
#########################################################################################33
set style histogram rowstacked
set style data histograms
set boxwidth 0.75 absolute
set style fill solid 1.00 noborder
#set boxwidth 0.8
#set style fill transparent solid 0.75 noborder
set yrange [0:2.5]
set xrange [0:12]
set multiplot layout 3,2 title ""
##PLOT_1 (1,1)
set label "(a) {/Symbol-Oblique b}Mal-C_{12}(12%wat)" at 1, 2.2 #labelFONTin
plot "HB-data-maltoLyo12per.dat" using 2 t "Lipid-lipid" lc rgb "#191970", '' using 3:xticlabels(5) t "Water-lipid" lc rgb "#6495ED"
###PLOT_2 (1,2)
unset label
set label "(b) {/Symbol-Oblique b}Mal-C_{12}(23%wat)" at 1, 2.2 #labelFONTin
plot "HB-data-maltoLyo23per.dat" using 2 t "Lipid-lipid" lc rgb "#191970", '' using 3:xticlabels(5) t "Water-lipid" lc rgb "#6495ED"
###PLOT_3 (2,1)
unset label
set label "(c) {/Symbol-Oblique b}Mal-C_{12}C_{8}({/Helvetica-Italic R}) " at 1, 2.2 #labelFONTin
plot "HB-data-bcmLyo25perR.dat" using 2 t "Lipid-lipid" lc rgb "#191970", '' using 3:xticlabels(5) t "Water-lipid" lc rgb "#6495ED"
###PLOT_4 (2,2)
unset label
set label "(d) {/Symbol-Oblique b}Mal-C_{12}C_{8}({/Helvetica-Italic S}) " at 1, 2.2 #labelFONTin
plot "HB-data-bcmLyo25perS.dat" using 2 t "Lipid-lipid" lc rgb "#191970", '' using 3:xticlabels(5) t "Water-lipid" lc rgb "#6495ED"
###PLOT_4 (3,1)
unset label
set label "(e) {/Symbol-Oblique b}Mal-C_{12}C_{8}({/Helvetica-Italic RS}) " at 1, 2.2 #labelFONTin
plot "HB-data-bcmLyo25perRS.dat" using 2 t "Lipid-lipid" lc rgb "#191970", '' using 3:xticlabels(5) t "Water-lipid" lc rgb "#6495ED"
######################################################################################################
#set size 0.3,0.3
#set origin 0.70,0.6
set bmargin at screen 0
set key center #keyFONT
set border 0
unset xlabel
unset ylabel
unset label
unset tics
set format x ""
set format y ""
set yrange [0:1]
plot 2 ls 1 title "Lipid-lipid",\
2 ls 2 title "Water-lipid"
######################################################################################################
unset multiplot
You can do this with a trick:
unset key
just after the set multiplot command, so no key is displayed for the first plots. Then, before the last one, issue a command that will restore the key and put it in the right place, that is, outside of the current plot:
###PLOT_4 (3,1)
set key at graph 1.5,screen 0.5 center center

Gnuplot types of error bars

Can we change the type of line used by gnuplot in the errorbars?
This is my gnuplot code:
set terminal postscript eps color
set output '| epstopdf --filter --outfile=plot.pdf'
set xlabel "Simulation days"
set xtics nomirror
set ylabel "Time (seconds)"
set ytics nomirror
set logscale y
set key left top
plot "data1.csv" using 1:($2/1000):($3/1000) with yerrorbars pt 5,\
"data2.csv" using 1:($2/1000):($3/1000) with yerrorbars pt 7
The error bars from the first plot are different from the second one.
The first line is solid, but the second is dotted.
Its possible to define the style of the error bar?
In your case, the easiest option is to use the solid terminal option to have only solid lines:
set terminal postscript eps color solid lw 3
set output '| epstopdf --filter --outfile=plot.pdf'
set samples 10
set xrange [0:10]
unset key
plot '+' using 1:1:(0.2*$1) w yerrorbars, \
'' using 1:(1.5*$1):(0.1*$1) w yerrorbars
Result with 4.6.4:
Alternatively, you can use lt 1 lc 2 for the second plot, which selects the line pattern of the first linetype (which is solid), and the color of the second one:
plot '+' using 1:1:(0.2*$1) w yerrorbars, \
'' using 1:(1.5*$1):(0.1*$1) lt 1 lc 2 w yerrorbars

How do you plot bar charts in gnuplot?

How do you plot bar charts in gnuplot with text labels?
Simple bar graph:
set boxwidth 0.5
set style fill solid
plot "data.dat" using 1:3:xtic(2) with boxes
data.dat:
0 label 100
1 label2 450
2 "bar label" 75
If you want to style your bars differently, you can do something like:
set style line 1 lc rgb "red"
set style line 2 lc rgb "blue"
set style fill solid
set boxwidth 0.5
plot "data.dat" every ::0::0 using 1:3:xtic(2) with boxes ls 1, \
"data.dat" every ::1::2 using 1:3:xtic(2) with boxes ls 2
If you want to do multiple bars for each entry:
data.dat:
0 5
0.5 6
1.5 3
2 7
3 8
3.5 1
gnuplot:
set xtics ("label" 0.25, "label2" 1.75, "bar label" 3.25,)
set boxwidth 0.5
set style fill solid
plot 'data.dat' every 2 using 1:2 with boxes ls 1,\
'data.dat' every 2::1 using 1:2 with boxes ls 2
If you want to be tricky and use some neat gnuplot tricks:
Gnuplot has psuedo-columns that can be used as the index to color:
plot 'data.dat' using 1:2:0 with boxes lc variable
Further you can use a function to pick the colors you want:
mycolor(x) = ((x*11244898) + 2851770)
plot 'data.dat' using 1:2:(mycolor($0)) with boxes lc rgb variable
Note: you will have to add a couple other basic commands to get the same effect as the sample images.
plot "data.dat" using 2: xtic(1) with histogram
Here data.dat contains data of the form
title 1
title2 3
"long title" 5
I would just like to expand upon the top answer, which uses GNUPlot to create a bar graph, for absolute beginners because I read the answer and was still confused from the deluge of syntax.
We begin by writing a text file of GNUplot commands. Lets call it commands.txt:
set term png
set output "graph.png"
set boxwidth 0.5
set style fill solid
plot "data.dat" using 1:3:xtic(2) with boxes
set term png will set GNUplot to output a .png file and set output "graph.png" is the name of the file it will output to.
The next two lines are rather self explanatory. The fifth line contains a lot of syntax.
plot "data.dat" using 1:3:xtic(2) with boxes
"data.dat" is the data file we are operating on. 1:3 indicates we will be using column 1 of data.dat for the x-coordinates and column 3 of data.dat for the y-coordinates. xtic() is a function that is responsible for numbering/labeling the x-axis. xtic(2), therefore, indicates that we will be using column 2 of data.dat for labels.
"data.dat" looks like this:
0 label 100
1 label2 450
2 "bar label" 75
To plot the graph, enter gnuplot commands.txt in terminal.
I recommend Derek Bruening's bar graph generator Perl script. Available at http://www.burningcutlery.com/derek/bargraph/
You can directly use the style histograms provide by gnuplot. This is an example if you have two file in output:
set style data histograms
set style fill solid
set boxwidth 0.5
plot "file1.dat" using 5 title "Total1" lt rgb "#406090",\
"file2.dat" using 5 title "Total2" lt rgb "#40FF00"

Resources