So, here is my data file
1 3 4 2 3 5 2which I will just name as 'bar.dat', and here is our script
reset
unset key
set style fill solid 1.0
set yrange [0:6]
colour = "#080000"
f(x,n) = (colour = sprintf("#%02X%02X%02X", 128+n/2, n, n), x)
w(n) = 0.8*cos(n/230.0*pi/2.0)
plot for [n=1:230:2] 'bar.dat' u 0:(f($1,n)):(w(n)) with boxes lc rgbcolor colour
Simple enough, let us see what it does! The first four lines are just the usual settings, although, the yrange is really irrelevant. I set it only for aesthetic reasons (otherwise, gnuplot would set the yrange automatically to [1:5] for the data file above, and we wouldn't see one of the columns). Then we define a variable called 'colour'm which we will eventually overwrite in our function definition of f(x,n). f(x,n) returns x, thus, in this regard it would be absolutely useless, but when doing so, it actually prints a string to 'colour'. The next function is w(n), which will determine in what fashion our colour will converge to white. Finally, we plot the data file some 115 times, each time with a smaller, and shinier box. At the end, we get something like this
We can very easily change the direction of the light. All we have to do is define a new function that shifts the bars as we progress with our for loop. So, the new script could be something like this
reset
unset key
set style fill solid 1.0
set yrange [0:6]
colour = "#080000"
f(x,n) = (colour = sprintf("#%02X%02X%02X", 128+n/2, n, n), x)
w(n) = 0.8*cos(n/230.0*pi/2.0)
shift(x,n) = x-0.8*n/850.0
plot for [n=1:230:2] 'bar.dat' u (shift($0,n)):(f($1,n)):(w(n)) with boxes lc rgbcolor colour
with a result as in this graphIt should be really easy to modify the script to accommodate more data sets. Well, this is for now. I don't actually know what I will write about next time, but I am sure that there will be something!
Cheers,
Zoltán


TAHNKS FOR YOUR SHARING~~~VERY NICE ........................................
ReplyDeleteDar, Sir.
ReplyDeleteI think there are two errors in your first script:
f(x,n) = (colour = sprintf("#%02X%02X%02X", 128+n/2, n, n), x)
The above gives me this error:
')' expected -> it is pointing towards the "=" after the word "colour"
The second error is:
plot for [n=1:230:2] 'bar.dat' u 0:(f($1,n)):(w(n)) with boxes lc rgbcolor colour
The above gives me this error:
':' expected -> it is pointing towards "=" in "[n=1:230:2]"
Could you please advise me as to what am I missing?
This is not an error per se. The problem is that you are not using gnuplot 4.4, but some earlier version. I forgot to explicitly point out in this post that you need 4.4 in order to run this script. Both the function declaration and the for loop are new, and will not work on 4.2.
ReplyDeleteCheers,
Zoltán