May 6th, 2011 | 2 Comments

In one of the last entries we have seen how to plot a loudspeaker with Gnuplot.

This time we will have a look at the case of setting more than one loudspeaker to your plot. Furthermore we allow the placement of the loudspeakers after entries in a data file.

Let us assume we have a data file containing the x position, y position and orientation phi of a single loudspeakers per line. Now we have to read the data with Gnuplot and set the objects according to the data. This can be done by a dummy plot, because by applying the `plot`

command, variables can be stored. For the dummy plot we setting the output of the `plot`

command to `table`

and use `/dev/null`

as the place to write the data.

# --- Read loudspeaker placement from data file set table '/dev/null' add_loudspeaker(x,y,phi) = sprintf(\ 'call "set_loudspeaker.gnu" "%f" "%f" "%f" "%f";',x,y,phi,0.2) CMD = '' plot 'loudspeaker_pos.dat' u 1:(CMD = CMD.add_loudspeaker($1,$2,$3)) eval(CMD) unset table

The `plot`

command now enables us to add the data from the file to the variable `CMD`

, which is then executed by the `eval`

command. To create the variable, the `add_loudspeaker`

function creates a string with the data for every single line of the data file. The `eval(CMD)`

calls the set_loudspeaker.gnu function once for every single data line, which corresponds to a single loudspeaker. The set_loudspeaker.gnu function itself does the same as we have done in the draw a single loudspeaker entry, but in addition it uses a rotation matrix to change the orientation of the single loudspeakers.

After having set the loudspeakers, we add some activity to three of the loudspeakers and finally get the result in Fig. 1.

# --- Plot loudspeaker activity set parametric fx(t,r,phi) = -1.5*cos(phi)+r*cos(t) fy(t,r,phi) = -1.5*sin(phi)+r*sin(t) set multiplot set trange [-pi/6+pi/8:pi/6+pi/8] plot for [n=1:3] fx(t,n*0.25,pi/8),fy(t,n*0.25,pi/8) w l ls 2 unset object set trange [-pi/6-pi/8:pi/6-pi/8] plot for [n=1:3] fx(t,n*0.25,-pi/8),fy(t,n*0.25,-pi/8) w l ls 2 set trange [-pi/6:pi/6] plot for [n=1:3] fx(t,n*0.25,0),fy(t,n*0.25,0) w l ls 1 unset multiplot

The three waves before the desired loudspeakers are plotted within an iteration that effects the radius by using the `for`

command. The `unset object`

is executed after the first plot in the `multiplot`

environment, because the loudspeakers should only be drawn once.

How is evaluated the y parameter resulting from (CMD = CMD.add_loudspeaker($1,$2,$3))?

I modified add_loudspeaker() to draw a list of roto-translated pieces of circle,

reading position and orientation from a file, but when I execute it I obtain the following error:

all points y value undefined!

Did I forget to set some important parameters?

I have the same problem, It seems the dummy plot is not able to read/recognize the x or y values.

I could fix it by setting xrange and yrange before the dummy plot.