Plot filledcurve with variable transparency

I want to plot a function in gnuplot with filledcurve, but having a variable transparency.

To be clear, consider the following example:

http://www.gnuplot.info/demo_canvas_4.7/rgba_lines.html

In this case, the arrow angle (an integer variable) is used as parameter to define the alpha channel. Is it possible to do the same using a function instead?

PS: I am aware that I'll probably will need to convert to an integer, as the alpha channel are bits...

Upvotes: 0

Views: 198

Answers (1)

theozh
theozh

Reputation: 25704

One simple approach to achieve your goal is plotting several highly transparent (e.g. alpha 0xef) scaled areas on top of each other. For this, the areas need to be easily scalable from a center point, e.g. like circles, ellipses, squares, triangles, etc.

In order to tune the results, you need to play with:

  • N: number of areas you are stacking. If N is small you will see steps, if N is large plotting will be slow (and resulting graph maybe large in case of vector format)
  • Alpha: transparency of objects. In order to fade it out the value should be high, e.g. >0xee.
  • R(): function of scaling radius of areas, e.g. (real(i)/N) would be linear

This question could also be of interest: Gnuplot: transparency of data points when using palette

Script: (works with gnuplot>=5.0.0)

### cirles with variable radial transparency
reset session

# create some random test data
set table $Data
    set samples 60
    # x,y,r,color
    plot '+' u (rand(0)*100):(rand(0)*100):(rand(0)*10+1):(int(rand(0)*0xffffff)) w table
unset table

set style fill solid 1.0 noborder
set samples 100
set key noautotitle
set angle degrees

N            = 50
Alpha        = 0xef
R(col,n)     = column(col)*(real(n)/N)**2
myColor(col) = (Alpha<<24) + int(column(col))

plot for [n=1:N] $Data u 1:2:(R(3,n)):(myColor(4)) w circle lc rgb var
### end of script

Result:

enter image description here

Upvotes: 1

Related Questions