help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: help with legend


From: Ben Abbott
Subject: Re: help with legend
Date: Tue, 17 Jan 2012 11:56:07 -0500

On Jan 17, 2012, at 11:40 AM, Valmor de Almeida wrote:

> On 01/17/2012 10:49 AM, Ben Abbott wrote:
> 
>> On Jan 17, 2012, at 10:20 AM, Valmor de Almeida wrote:
>> 
>>> On 01/16/2012 08:24 AM, Ben Abbott wrote:
>>> 
>>>> On Jan 15, 2012, at 9:58 PM, Valmor de Almeida wrote:
>>>> 
>>>>> On 01/15/2012 08:10 PM, Ben Abbott wrote:
>>>>>> 
>>>>>> On Jan 15, 2012, at 2:35 PM, Ben Abbott wrote:
>>>>>> 
>>>>>>> On Jan 15, 2012, at 12:48 PM, Valmor de Almeida wrote:
>>>>>>> 
>>>>>>>> Hello,
>>>>>>>> 
>>>>>>>> I am trying to customize legends on a plotyy axes/lines but I am not
>>>>>>>> able to. Here are the commands:
>>>>>>>> 
>>>>>>>> [ax, h1, h2] = plotyy(x1,y1, x2,y2, @plot, @plot);
>>>>>>>> 
>>>>>>>> legend(h1,y1Label,"location",'south',"fontname",'Helvetica');
>>>>>>>> 
>>>>>>>> legend(h2,y2Label,"location",'northeast',"fontname",'Helvetica');
>>>>>>>> 
>>>>>>>> Only the first legend shows up and the font is Courier which I am 
>>>>>>>> unable
>>>>>>>> to change. Also the text in the legend precedes the key which I would
>>>>>>>> like to invert using 'right' but it does not work either.
>>>>>>>> 
>>>>>>>> I am using octave-3.4.0. Would anyone have an example?
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Valmor
>>>>>>>> 
>>>>>>>> PS: In the above command I also tried legend(ax(1),...) and it does not
>>>>>>>> make a difference.
>>>>>>> 
>>>>>>> Octave tries to duplicate Matlab's implementation of plotyy and legend. 
>>>>>>> 
>>>>>>>         x1 = 0:5:10;
>>>>>>>         x2 = 0:10;
>>>>>>>         y1 = rand (size (x1));
>>>>>>>         y2 = rand (size (x2));
>>>>>>>         [ax, h1, h2] = plotyy (x1, y1, x2, y2, @plot, @plot);
>>>>>>>         y1Label = "y1";
>>>>>>>         y2Label = "y2";
>>>>>>> 
>>>>>>> The command below should produce the desired legend (please check, the 
>>>>>>> implementation may have changed since 3.4.0).
>>>>>>> 
>>>>>>>         legend ([h1, h2], {y1Label, y2Label}, "location", "south")
>>>>>>> 
>>>>>>> The commands below should also work, but currently reverse the legend 
>>>>>>> entries.
>>>>>>> 
>>>>>>>         legend ({y1Label, y2Label}, "location", "south")
>>>>>>> 
>>>>>>>         legend (y1Label, y2Label, "location", "south");
>>>>>>> 
>>>>>>> I've entered a bug report in the tracker.
>>>>>>> 
>>>>>>>         https://savannah.gnu.org/bugs/?35314
>>>>>>> 
>>>>>>> Regarding "Fontsize", the legend function doesn't accept property 
>>>>>>> names/values as input.
>>>>>>> 
>>>>>>> To change the fontname, the legend command returns the handle to the 
>>>>>>> legend. You can change its fontname property directly.
>>>>>>> 
>>>>>>>         h = legend ([h1, h2], {y1Label, y2Label}, "location", "south")
>>>>>>>         set (h, "fontname",'Helvetica") 
>>>>>>> 
>>>>>>> Ben
>>>>>> 
>>>>>> I've attached a changeset to the bug-tracker that fixes the legend 
>>>>>> command so that all three versions below work the same.
>>>>>> 
>>>>>>  legend ([h1, h2], {y1Label, y2Label}, "location", "south")
>>>>>> 
>>>>>>  legend ({y1Label, y2Label}, "location", "south")
>>>>>> 
>>>>>>  legend (y1Label, y2Label, "location", "south");
>>>>>> 
>>>>>> The tracker link is below.
>>>>>> 
>>>>>>  https://savannah.gnu.org/bugs/index.php?35314
>>>>>> 
>>>>>> Ben
>>>>>> 
>>>>> 
>>>>> Thanks Ben,
>>>>> 
>>>>> None of the forms work for my version 3.4.0.
>>>>> 
>>>>> error:   /usr/share/octave/3.4.0/m/plot/__gnuplot_print__.m at line 170,
>>>>> column 5
>>>>> 
>>>>> The handle to set the fontname does not work either. Which version are
>>>>> you using? 3.4.3 is the highest I will be able to go unless I compile
>>>>> octave myself.
>>>>> 
>>>>> --
>>>>> Valmor
>>>> 
>>>> 
>>>> The error from __gnplot_print__() is something different. That function 
>>>> only is called by print().
>>>> 
>>>> Running 3.4.0, I checked ...
>>>> 
>>>>    x = 0:10;
>>>>    plotyy (x, sqrt(x), x, x.^2);
>>>>    h = legend ("root", "squared");
>>>>    set (h, "fontname", "Courier")
>>>>    print test.eps
>>>>    print test.png
>>>> 
>>>> ... I encountered no errors, and obtained the expected results.
>>>> 
>>>> Can you provide a simple example that produces the __gnuplot_print__ error 
>>>> ?
>>>> 
>>>> Ben
>>> 
>>> Hello Ben,
>>> 
>>> Tried your example above and got
>>> 
>>> octave:3> h = legend("root", "squared");
>>> error: structure has no member `fontname'
>>> error: evaluating argument list element number 1
>>> error: called from:
>>> error:   /usr/share/octave/3.4.0/m/plot/__go_draw_axes__.m at line 2086,
>>> column 3
>>> error:   /usr/share/octave/3.4.0/m/plot/__go_draw_axes__.m at line 1475,
>>> column 31
>>> error:   /usr/share/octave/3.4.0/m/plot/__go_draw_figure__.m at line
>>> 119, column 21
>>> error:   /usr/share/octave/3.4.0/m/plot/__gnuplot_drawnow__.m at line
>>> 86, column 5
>> 
>> hmmm ... Please verify you get the same result below.
>> 
>>      class (h)
>>      ans = double
>>      ishandle (h)
>>      ans =  1
>>      get (h, "type")
>>      ans = axes
>> 
>> Also verify ...
>> 
>>      which legend
>>      `legend' is a function from the file 
>> /usr/share/octave/3.4.0/m/plot/legend.m 
>> 
>> Ben
> 
> I do.
> 
> Thanks,

Line 1475 of __go_draw_axes__.m is ...

1475    [fontname, fontsize] = get_fontname_and_size (hlgnd); 

Line 2086 is ...

2085    function [f, s, fnt, it, bld] = get_fontname_and_size (t)
2086      if (isempty (t.fontname) || strcmp (t.fontname, "*"))

hlgnd on line 1475 is the handle for the legend.

The errors indicate that the legend axes object doesn't include a "fontname" 
property, which all axes should

Please verify that "h" does have a fontname property.

        get (h, "fontname")

Ben




reply via email to

[Prev in Thread] Current Thread [Next in Thread]