[R] multhist,labels and percentages

Peter Ehlers ehlers at ucalgary.ca
Fri May 14 21:55:37 CEST 2010


Federico,

Yes, do use axis(2, at = whatever, labels = whateverelse) for one axis.
Then use axis(4, ...) for the other axis.
You may need to use par('usr') to determine the y-extent of the plot.

  -Peter Ehlers

On 2010-05-14 11:50, Federico Calboli wrote:
> On 14 May 2010, at 18:25, Thomas Stewart wrote:
>
>> First, why doesn't the following code work?  What exactly is the error you are getting?
>>
>> par(mfrow=c(1,2))
>> pop1<-rnorm(100)
>> hist(pop1,freq=F,ylim=c(0,1))
>> pop2<-rgamma(100,1,1)
>> hist(pop2,freq=F,ylim=c(0,1))
>
> Let's define 'work'. The code above works, it just utterly fails to do what I need to do, i.e. plot two distributions side by side on one single plot -- hence, I need to use multhist(), as the subject of my email might suggest...
>
>> Second, help.search("multihist") returned the multi.hist function.  Is multi.hist [instead of multihist] the function you are working with?
>
> I do not think so, I'm using multhist() is from library plotrix. I'll look at multi.hist, it might be more flexible.
>
>> Third, it sounds like you want to change the scale of the y axis.  The scale change you want is linear, so why not change the scale manually? Something like this will manually change the scale to percentages:
>>
>> pop1<-rnorm(156)
>> hist.pop1<-hist(pop1,yaxt="n",ylab="%",main="")
>> t<-axTicks(2)
>> axis(2,at=t,labels=round(t/length(pop1)*100,1))
>
> Excellent! that's what I need. Unfortunately, because the two pops are different sized I will have to cook up a second y-axis on the right of the plot for the second population
>>
>> Then, again, changing the scale creates more of a bar chart than a histogram plot.  Maybe you want to look at the barchart functions directly.  Or maybe directly calculate the bin percentages and plot them directly.
>
> I agree, but it is quite a bit more work, which, given the issue at hand (unability to read a chart for some users), does not seem worth it.
>
>> I think you have a lot of options to plot what you want.
>
> Your suggestion for the axis is excellent, thank you very much.
>
> F
>
>
>>
>> -tgs
>>
>>
>> On Fri, May 14, 2010 at 11:51 AM, Federico Calboli<f.calboli at imperial.ac.uk>  wrote:
>> On 14 May 2010, at 16:09, Thomas Stewart wrote:
>>
>>> Please be more specific with your question.  Perhaps a simple subset of the data you are trying to plot?  Here is some non-specific advice:
>>>
>>> Plotting histograms as percentages instead of frequency counts is already an option of the hist function.  For example,
>>>
>>> pop1<-rnorm(100)
>>> hist(pop1,freq=F)
>>
>> What you get is a desity, not a percentage, so you could have two bars with a value greater 0.5 on the y-axis. The fact that the area sums up to 1 does not mean that the sum of the heights adds up to 1 --the thing that my ignoramus want to see to understand. On the other hand, freq =T gives the counts, and the sum of the counts is the population total -- therefore (bar counts)/(pop total) *100  is the precentage. If I could slap that on the label of the y-axis I'd be sorted.
>>
>>>
>>> If you are plotting two histograms side-by-side (on the percentage scale), the y-axis of both plots can be set with the ylim option.  For example,
>>>
>>> par(mfrow=c(1,2))
>>> pop1<-rnorm(100)
>>> hist(pop1,freq=F,ylim=c(0,1))
>>> pop2<-rgamma(100,1,1)
>>> hist(pop2,freq=F,ylim=c(0,1))
>>
>> I'm using multhist(). The above would not work for me.
>>
>> F
>>
>>
>>
>>
>>>
>>> If your question were clearer, I might be able to help in more specific ways.
>>>
>>> -tgs
>>>
>>> On Fri, May 14, 2010 at 10:19 AM, Federico Calboli<f.calboli at imperial.ac.uk>  wrote:
>>> Hi All,
>>>
>>> I am in the annoying position of having to present some data to someone who seems to be somewhat less than numerate. I need to label the y-axes of a multhist with the y-axis labeled not as counts but as percentage of a population. Plotting the standard histogram is in a way fine, all I need is to:
>>>
>>> -- have a left-handside y-axis labels for pop 1 and a right-handside y-axis labels for pop2
>>> -- replace the counts in each axis with population percentages (easy to calculate, but how to stick them there?)
>>>
>>> Any suggestion would be gratefully received.
>>>
>>> F
>>>
>>>
>>> --
>>> Federico C. F. Calboli
>>> Department of Epidemiology and Biostatistics
>>> Imperial College, St. Mary's Campus
>>> Norfolk Place, London W2 1PG
>>>
>>> Tel +44 (0)20 75941602   Fax +44 (0)20 75943193
>>>
>>> f.calboli [.a.t] imperial.ac.uk
>>> f.calboli [.a.t] gmail.com
>>>
>>> ______________________________________________
>>> 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.
>>>
>>
>> --
>> Federico C. F. Calboli
>> Department of Epidemiology and Biostatistics
>> Imperial College, St. Mary's Campus
>> Norfolk Place, London W2 1PG
>>
>> Tel +44 (0)20 75941602   Fax +44 (0)20 75943193
>>
>> f.calboli [.a.t] imperial.ac.uk
>> f.calboli [.a.t] gmail.com
>>
>>
>>
>>
>>
>>
>>
>
> --
> Federico C. F. Calboli
> Department of Epidemiology and Biostatistics
> Imperial College, St. Mary's Campus
> Norfolk Place, London W2 1PG
>
> Tel +44 (0)20 75941602   Fax +44 (0)20 75943193
>
> f.calboli [.a.t] imperial.ac.uk
> f.calboli [.a.t] gmail.com
>
> ______________________________________________
> 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.
>
>

-- 
Peter Ehlers
University of Calgary



More information about the R-help mailing list