[R] legend at fixed distance form the bottom

Christophe Genolini cgenolin at u-paris10.fr
Mon Dec 8 22:30:36 CET 2008


Thank you very much,
That's very close to what I want. Well, I would have love to let the 
user manualy resize the graph, but I am not sur it is possible. So 
that's enouth for me, thanks a lot.

Christophe

PS : with grconvertX(0.5,'nfc'), the legend is not center.
With grconvertX(0.535,'nfc'), it is almost center. Is it because the 
left margin is larger than the right margin?
> Try this:
>
> symboles <- c(3,4,5,6)
> dn <- rbind(matrix(rnorm(20),5))
> layout(matrix(c(1,1,1,2,2,3),3))
>
>
> for(i in 1:3){
>   matplot(dn,type="b",xlab="",pch=symboles)
>   legend(grconvertX(0.5,'nfc'), grconvertY(0,'nfc'),
>         xjust=0.5, yjust=0,
>         pch = unique(symboles),
>         legend = c("a","b","c","d"),
>         horiz = TRUE, xpd = NA)
> }
>
>
> Does that do what you want?  Or at least get you started in the correct direction?
>
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.snow at imail.org
> 801.408.8111
>
>
>   
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>> project.org] On Behalf Of Christophe Genolini
>> Sent: Monday, December 08, 2008 11:28 AM
>> To: Greg Snow
>> Cc: r-help at r-project.org
>> Subject: Re: [R] legend at fixed distance form the bottom
>>
>> Sorry, I will be more precise. Here is an example (simplified) of graph
>> I want :
>>
>> ---- 8< ----
>>
>> symboles <- c(3,4,5,6)
>> dn <- rbind(matrix(rnorm(20),5))
>> layout(matrix(c(1,1,1,2,2,3),3))
>>
>> for(i in 1:3)
>>   matplot(dn,type="b",xlab="+: a  x: b  ???: c  ???: d",pch=symboles)
>> ---- 8< ----
>>
>> But instead of ???, I want the "triangle" and the "losange".
>> So I try to use legend in order to get the losange and triangle :
>>
>> --- 8< ----
>>
>> for(i in 1:3){
>>   matplot(dn,type="b",xlab="",pch=symboles)
>>   legend("top", pch = unique(listSymboles),
>>         legend = c("a","b","c","d"),
>>         inset = c(0,1.1), horiz = TRUE, xpd = NA)
>> }
>>
>> --- 8< ----
>>
>> On the first plot, the legend is down, on the second, the legend is on
>> a
>> correct position, on the third one, the legend in *on* the graduation.
>> So my problem is to plot either a legend at a fixed distance from the
>> graph or to put some symbol ("triangle", "losange" and all the other
>> since I might have more than 4 curves) in the xlab.
>>
>> Any solution ?
>>
>> Thanks
>>
>> Christophe
>>
>>
>>
>>
>>
>>     
>>> I suggested the use of grconvertY if you want to place something
>>>       
>> exactly n inches from the bottom, then grconvertY will give the user
>> (or other) coordinates that match, or if you want to place something
>> exactly 10% of the total device height from the bottom, etc.
>>     
>>> What to do in replotting a graph afte a resize is usually tricky and
>>>       
>> requires information that the program does not have and therefore has
>> to guess at, that is why it is safest to not depend on the computer
>> doing the correct thing in a resize and just tell the users to
>> resize/set size before calling your function.
>>     
>>> If you give a bit more detail on what you are trying to accomplish
>>>       
>> and what you mean by fixed distance (number of inches, proportion of
>> device height, margin row, etc.) we may be better able to help.
>>     
>>> --
>>> Gregory (Greg) L. Snow Ph.D.
>>> Statistical Data Center
>>> Intermountain Healthcare
>>> greg.snow at imail.org
>>> 801.408.8111
>>>
>>>
>>>
>>>       
>>>> -----Original Message-----
>>>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>>>> project.org] On Behalf Of Christophe Genolini
>>>> Sent: Saturday, December 06, 2008 7:08 AM
>>>> To: Greg Snow
>>>> Cc: r-help at r-project.org
>>>> Subject: Re: [R] legend at fixed distance form the bottom
>>>>
>>>> Thanks for your answer.
>>>>
>>>> Unfortunatly, I can not create the graphice with the final size
>>>>         
>> since I
>>     
>>>> am writing a package in wich the user will have to chose between
>>>> several
>>>> graphics, and then he will have to export one. And they might be one
>>>> graph, or 2x2, or 3x3...
>>>>
>>>> I check the grconvertY but I did not understand what you suggest. To
>>>> me,
>>>> the use of legend can not work since every length in the legend box
>>>> (xlength, ylength, distance to axes) will change when resizing the
>>>> graph. I was more expecting something like introduce the symbols
>>>>         
>> used
>>     
>>>> in
>>>> the graph *in* the xlab. Is it possible ?
>>>>
>>>> Christophe
>>>>
>>>>
>>>>         
>>>>> It is best to create the graphics device at the final size desired,
>>>>>
>>>>>           
>>>> then do the plotting and add the legend.  For getting a fixed
>>>>         
>> distance,
>>     
>>>> look at the function grconvertY for one possibility.
>>>>
>>>>         
>>>>> --
>>>>> Gregory (Greg) L. Snow Ph.D.
>>>>> Statistical Data Center
>>>>> Intermountain Healthcare
>>>>> greg.snow at imail.org
>>>>> 801.408.8111
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> -----Original Message-----
>>>>>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
>>>>>> project.org] On Behalf Of Christophe Genolini
>>>>>> Sent: Friday, December 05, 2008 6:40 AM
>>>>>> To: r-help at r-project.org
>>>>>> Subject: [R] legend at fixed distance form the bottom
>>>>>>
>>>>>> Hi the list
>>>>>>
>>>>>> I would like to add a legend under a graph but at a fixed distance
>>>>>>
>>>>>>             
>>>> from
>>>>
>>>>         
>>>>>> the graphe. Is it possible ?
>>>>>> More precisely, here is my code :
>>>>>>
>>>>>> --- 8< ----
>>>>>> symboles <- c(3,4,5,6)
>>>>>> dn <- rbind(matrix(rnorm(20),,5),matrix(rnorm(20,2),,5))
>>>>>> listSymboles <- rep(symboles,each=2)
>>>>>> matplot(t(dn),pch=listSymboles,type="b")
>>>>>> legend("bottom", pch = unique(listSymboles), legend = c("ane",
>>>>>> "cheval",
>>>>>> "poney", "mule"), inset = c(0,-0.175), horiz = TRUE, xpd = NA)
>>>>>> --- 8< ----
>>>>>>
>>>>>> But when I change the size of the graph, the legend is misplaced.
>>>>>>
>>>>>> Instead, I try to put some text in xlab, but I do not know how to
>>>>>>
>>>>>>             
>>>> get
>>>>
>>>>         
>>>>>> the +, x , V and other symbol.
>>>>>> Does anyone got a solution ?
>>>>>>
>>>>>> Thanks a lot.
>>>>>>
>>>>>> Christophe
>>>>>>
>>>>>> ______________________________________________
>>>>>> R-help at r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>> PLEASE do read the posting guide http://www.R-project.org/posting-
>>>>>> guide.html
>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>
>>>>>>
>>>>>>             
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide http://www.R-project.org/posting-
>>>> guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>>         
>>>       
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-
>> guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>     
>
>



More information about the R-help mailing list