Вопрос по ggplot2, r – Обернуть текст легенды в ggplot2

27

При создании графиков с использованием ggplot2 у меня есть несколько длинных имен легенд, которые я хочу заключить в две строки. Например:

<code>a <- (1:10)
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8)
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon")
df1 = data.frame(a,b,places)
library(ggplot2)
i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) + opts(legend.position="bottom")
</code>

Как бы я обернул элементы легенды, когда поле установлено внизу - скажем, в 2 или 3 строки? На данный момент семь предметов легенды находятся рядом друг с другом. Я бы предпочел, чтобы они отображались в два ряда (скажем, четыре города в верхнем ряду и три города во втором ряду).

Спасибо заранее.

Я бы разделил ваш вопрос на два отдельных вопроса. На один из них ответит мой ответ (завершение текста, как было видно в исходном вопросе), а на второй - как создать многоколоночные легенды с помощью ggplot. PS: расположение легенды не должно сильно меняться для ответа на ваш вопрос). Etienne Low-Décarie

Ваш Ответ

2   ответа
20

df1$places<-sub("-", "- \n ", df1$places)  

i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)

enter image description here

Заметки:  - Вы можете использовать gsub для замены всех символов & quot; - & quot; с & quot; - \ n & quot;

Спасибо @Etienne Low-D & # xE9; кари, но это не совсем то, что я хочу. Я все еще хочу легенду на дне, но текст легенды очень длинный. Поэтому вместо 7 меток в одном длинном ряду я хочу, чтобы они были в двух рядах (сохраняя форму, подобную форме на вашем примере). KT_1
@KatieT Вы должны уточнить, хотите ли вы обернутьtext labels в легенде через 2 строки, илиlegend items сами или оба. Вы задали вопрос только о том, что упоминали обертывание «имен легенды», к которым относится этот ответ.
Знаете ли вы, как сделать это с заголовком легенды?
27

library(scales)
i + guides(colour = guide_legend(nrow = 2))

Но вы можете обнаружить, что вы все еще хотите использовать технику обтекания текстом, чтобы привести его в соответствие.

Кроме тогоcolourэто также работает для другой эстетики, такой какguides(linetype=guide_legend(nrow=2)).

Похожие вопросы