2016-11-13 3 views
2

Есть ли способ аннотировать ggplot тремя строками один поверх другого, сохраняя при этом одинаковые размеры текста по трем линиям?R ggplot аннотируется с использованием трех значений и bgoup

Я почти там, но размеры текста различны в третьей строке, это выглядит как bgroup только использует первые две строки, и я не могу получить это право ...

Я добавляю текст, используя к «вершине» приложений от «? plotmath», который прекрасно работает, но текст в третьей строке выходит в другой размер по сравнению с двумя другими линиями ...

library(ggplot2) 
line1 = "xxx data1" 
line2 = "yyy data2" 
line3 = "zzz data3" 

df=data.frame(x=rep(1:8, 3), y=c(0,1,3,4,5,6,7,8, 8,7,6,3,2,1,3,4, 0,2,4,5,6,7,8,9), variable=c("x", "x","x","x","x","x","x","x","y","y","y","y","y","y","y","y","z","z","z","z","z","z","z","z")) 
p <- ggplot(df) + theme_bw() + geom_point(aes(x=x,y=y, color=variable)) + geom_line(aes(x=x,y=y, color=variable)) + 
geom_text(x=max(df$x), y = max(df$y), label = paste('bgroup("{", atop(atop("',line1,'","',line2,'"),"', line3,'"), "}")',sep=''), size=3.5,parse=TRUE) 

Я думал, что я получал все три строки внутри bgroup, но я не могу получить правую пасту. Если есть что-нибудь, что я могу попробовать, пожалуйста, посоветуйте. Огромное спасибо!

+0

делясь воспроизводимым примером ваших данных! –

ответ

0

Чтобы прекрасно центр все (что \n не будет делать), сохранить каждый фрагмент текста такого же размера, независимо от количества линий и в то же время, будучи в состоянии настроить подстрочный пространство, используйте это:

xlab(expression(atop(textstyle("whateverline1"),atop(textstyle("whateverline2"),atop(scriptscriptstyle(""),textstyle("whateverline3")))))) 

Затем используйте labeller=label_parsed

Это также работает для facet_grid, название и ylab

Обратите внимание на atop и textstyle, чтобы разместить текст, сохраняя при этом одинаковый размер и scriptscriptstyle("") для управления расстоянием между линиями. Вы также можете использовать различные относительные размеры текста с использованием scriptstyle или scriptscriptstyle в зависимости от ваших потребностей и, конечно же, element_text(size=whatevernumber) в разделе theme раздел

Смежные вопросы