Hua Li wrote:
Hi All,

I have a problem of putting long titles on a graph:

for example,

x= seq(1:100)
y=seq(1:100)
plot(x,y,main="p=0.05:A-B=3,C-D=10,D-E=100,A-F=2,AFR-E=3,ACE-D=1,ADEF-M=0,AED-E=10,DE-F=3,AB-J=4,AC-J=10,ED-F=1,ED-B=4,AF-B=10,CD-S=10,AM-C=4")

R seems not able to print the whole title. The title content might be changing 
and thus I don't know how long it is beforehand. Is there a way to measure the 
length and then put the title into different lines accordingly?


There's a strwidth() function that gives the width of a string on the current plot. Note you have to do the plot first so that R knows the coordinates of the plot, since strwidth returns the width in plot coordinates. So:

t="This is a very long title and I would like to split it somewhere, but if I split it in the wrong place bad things will happen"

 x=(1:10)*100
 y=1:10
 plot(x,y)    # x axis is 1:1000
 strwidth(t)

gives:

[1] 2002.939

but
 plot(y,x)    # x axis is 1:10
 strwidth(t)
[1] 20.02939

Now, once you've done your plot you can get the width with:

 diff(par()$usr[1:2])
[1] 9.72

and then if strwidth if your title is bigger than that you'll need to split it into N chunks. Your splitting algorithm will have to be clever if you want to break a sentence at word spaces though!

Hopefully this is enough to get you going.

Barry

______________________________________________
R-help@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.

Reply via email to