R ggplot аннотирован поверх с использованием трех значений и bgroup

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

Я почти закончил, но размер текста в третьей строке отличается, похоже, что 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, но я не могу правильно вставить. Если есть что-то, что я могу попробовать, пожалуйста, посоветуйте. Спасибо большое!


person user971102    schedule 13.11.2016    source источник
comment
поделитесь воспроизводимым примером ваших данных!   -  person joel.wilson    schedule 13.11.2016


Ответы (1)


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

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

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

Это также работает для facet_grid, title и ylab.

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

person O. Bertrand    schedule 20.02.2018
comment
@user971102 user971102 Я бы рекомендовал принять этот ответ - person Michael Lee; 09.06.2021