[R] dotchart: Gap between text and chart

Duncan Murdoch murdoch at stats.uwo.ca
Mon Mar 13 15:54:50 CET 2006


On 3/13/2006 9:33 AM, Dietrich Trenkler wrote:
> I have some data which I would like to display with dotchart. The
> labels are very long, so the chart becomes too small. Setting cex=0.7
> seems to be a good compromise, but the gap between the text and the
> chart still is too large. I did not find a "gap" parameter in the
> description of dotchart...
> 
> Thanks for any help.
> 
> D. Trenkler
> 
> 
> "a" <- structure(c(103.35, 36.73, 55.09, 302.66, 68.54, 35.46,
>     138.65, 25.21, 110.85, 6.66, 46.57, 70.23), .Names = 
> c("Nahrungsmittel und alkoholfreie Getraenke",
>     "Alkoholische Getraenke, Tabakwaren", "Bekleidung und Schuhe",
>     "Wohnungsmieten, Energie", "Einrichtungsgegenstaende", 
> "Gesundheitspflege",
>     "Verkehr", "Nachrichtenuebermittlung", "Freizeit, Unterhaltung  und 
> Kultur",
>     "Bildungswesen", "Beherbergungs und Gaststaettendienstleistungen",
>     "Andere Waren und Dienstleistungen"))
> 
> dotchart(sort(a))
> dotchart(sort(a),cex=0.7)
>                                 
> 

It looks like the calculations of label widths are inaccurate, probably 
because strwidth can't accurately measure the size of strings.  I'm not 
sure if this is a bug, or just a limitation of the information available 
to it.

However, I think you could get the result you want with some trial and 
error by doing the dotchart with blank labels first, then using mtext to 
put the labels in place.  For example:

"a" <- c(103.35, 36.73, 55.09, 302.66, 68.54, 35.46,
     138.65, 25.21, 110.85, 6.66, 46.57, 70.23)

names <-
c("Nahrungsmittel und alkoholfreie Getraenke",
     "Alkoholische Getraenke, Tabakwaren", "Bekleidung und Schuhe",
     "Wohnungsmieten, Energie", "Einrichtungsgegenstaende",
"Gesundheitspflege",
     "Verkehr", "Nachrichtenuebermittlung", "Freizeit, Unterhaltung  und
Kultur",
     "Bildungswesen", "Beherbergungs und Gaststaettendienstleistungen",
     "Andere Waren und Dienstleistungen")

o <- order(a)
a <- a[o]
names <- names[o]

dotchart(a, labels=rep("                                          ", 
length(a)))
mtext(names, 2, at=1:length(a), adj=1, las=2, line=-14, cex=0.8)

Duncan Murdoch




More information about the R-help mailing list