Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot energy diagram using gnuplot

Tags:

gnuplot

I have data file:

0 0 3 -0.17 6 -0.05
0 0 3 -0.23 6  0.90
0 0 3 -0.41 6  0.50
0 0 3 -0.50 6 -0.33
0 0 3 -0.20 6  0.80

I want to plot the figure like this which connects each point in the lines. Can you tell me how? enter image description here

like image 250
Binh Thien Avatar asked Sep 05 '25 03:09

Binh Thien


1 Answers

The following suggestion uses the plotting styles with boxxyerror, with vectors and with labels. The zero level gets the color of the last entry because everything is plotted on top of each other. Check the following example as starting point for further tweaking.

Script:

### energy diagram
reset session

$Data <<EOD
0 0 3 -0.17 6 -0.05   A_{one}
0 0 3 -0.23 6  0.90   B_{two}
0 0 3 -0.41 6  0.50   C_{three}
0 0 3 -0.50 6 -0.33   D_{four}
0 0 3 -0.20 6  0.80   E_{five}
EOD

set key noautotitle
set xrange [-1:8]

myWidth = 0.3

plot for [i=1:3] $Data u (column(2*i-1)):(column(i*2)):(myWidth):(0):0:xtic(i*2-1) w boxxy lw 3 lc var, \
     for [i=1:2] '' u (column(2*i-1)+myWidth):(column(i*2)): \
         (column(2*i+1)-column(2*i-1)-2*myWidth):(column(i*2+2)-column(i*2)):0 w vec nohead lw 1 dt 3 lc var, \
     '' u 5:6:7:0 w labels offset 6,0 tc var font ",16"
### end of script

Result:

enter image description here

Addition:

From your comments: If the levels are to close such that the labels overlap, you could add an individual offset (here in column 8). Check the following example where the data is modified that the levels B and E are very close.

Script:

Edit after OP's comment: simplifications, with xerrorbar instead of with boxxyerror and with custom xtics

Edit 2: simplified input data

  • reduce the input data to the minimum
  • add xticlabel from columnheader
  • use column number as x-coordinate. Mind the difference in ...$Data u (col):col:...: e.g. if col=1, (col) is the fixed value of 1, and col is the value from column 1.
### energy diagram with individual offset of labels
reset session

$Data <<EOD
A     B       C       Label       Offset
0.0   -0.17   -0.05   A_{one}     0
0.0   -0.23    0.90   B_{two}     0.05
0.0   -0.41    0.50   C_{three}   0
0.0   -0.50   -0.33   D_{four}    0
0.0   -0.20    0.85   E_{five}   -0.05
EOD

set key noautotitle
set errorbars 0
set offset 0.5,0.5,0,0
myWidth = 0.1

plot for [col=1:3] $Data u (col):col:(myWidth):0:xtic(columnhead(col)) w xerr lw 3 ps 0 lc var, \
     for [col=1:2] '' u (col+myWidth):col:(1-2*myWidth):(column(col+1)-column(col)):0 \
         w vec nohead lw 1 dt 3 lc var, \
     '' u (3+myWidth):($3+$5):4:0 w labels left offset 1,0 tc var font ",16"
### end of script

Result:

enter image description here

like image 106
theozh Avatar answered Sep 08 '25 11:09

theozh