Heinz,

<disclaimer>
VERY LONG
</disclaimer>

:)

I've found that the gca() (get current axes) handle allows to see and control many properties. First run this example:

  x = (0:360)/180*%pi;
  y = 0.5*(1 + cos(x));
  z = 0.5 + 0.5*(1 + cos(x));
  clf
  polarplot([x' x'],[y' z'],[1 2])

Entering

gca()

one of the entities included in the handle are the children. Among much other information there is

children: matrix 34x1.

With

gca().children

you get a hint. The answer is:

34 by 1 matrix of handles:
==========================
Text
Segs
Text
Segs

(...)

Text
Arc
Compound

Exactly 34 rows. Yo can see what's inside any one of them by means of, for instance,

gca().children(1)

The answer starts

Handle of type "Text" with properties:
======================================
parent: Axes
children: []
visible = "on"
text = "330"
alignment = "left"
data = [1.3825602,-0.7982215,0]

(...)

This says it has a "parent" Axes (it is logical, since this is one of the "children" of the current axes), no children (no subordinated structure), it is visible, its text is "330", it is lefy aligned, and its coordinates are

(x,y,z) = [1.3825602,-0.7982215,0]

They can be retrieved as a variable by means of

gca().children(1).data

It is easy to check that these coordinates represent an angle of 330° and a radius slightly larger than the radius of the polar plot border circumference (by simple inspection, 1.5). This radius can be calculated as

Rtext = sqrt(sum(gca().children(1).data.^2))

One can change the position and the text to be displayed, for instance, to locate the text "NNE" at -22.5°,

theta = -22.5/180*%pi;
gca().children(1).data = Rtext*[cos(theta), sin(theta), 0];
gca().children(1).text = "NNE";

Next is to control the radial lines. These are in children(2). Typing

gca().children(2)

gives the following answer:

Handle of type "Segs" with properties:
======================================
parent: Axes
children: []
visible = "on"
data = [0,0,0;1.3858193,-0.5740251,0]
line_mode = "on"

(...)

The field data represent the coordinates of the extremes of the radial lines:

   0.          0.          0.
   1.3858193  -0.5740251   0.

so the radius is the length:

A = gca().children(2).data;
R = sqrt((A(2, :)- A(1, :)).^2);

You can modify the angle this way:

theta = -22.5/180*%pi;
gca().children(2).data(2, :) = R * [cos(theta), R*sin(theta), 0];

This can be repeated with other children, for instance children(3) contains the second text and children(4) the second radial line.

Most of this information can be discovered typing

apropos entities

which leads to the graphic entities help. It is very ramified and very long, but it is worth it...


There is stil a problem I could not solve, i.e., there are only 24 children, corresponding 12 to text and 12 to radius, and for a windrose you need 16 of each. The other children correspond to the circumference arcs of the rho grid of the polar plot.

I don't know how to add or insert more children to the graphic handle...

One possible way (very risky, ensure you make a backup first or work with a different function name) is try to find the source for the function polarplot and see where is the definition of the number of labels and try to customize the function.

Regards,

Federico Miyara






On 27/03/2019 17:37, Heinz Nabielek wrote:
Friends and colleagues:

Scilab polarplot does a great job displaying my 155,508 measured data pairs 
wind direction/ wind speed in a split second( while MS Excel is petrified) to 
make a great wind rose.

One concern: I would like to change the default 30° ray separation into 22.5° 
separations to indicate N, NNE, NE, ENE, E .... directions.

How can I do that?

Best greetings
Heinz
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users




---
El software de antivirus Avast ha analizado este correo electrónico en busca de 
virus.
https://www.avast.com/antivirus

_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

Reply via email to