Товщина кордону контрольної точки в ggplot


78

Використовуючи ggplot, я можу встановити shapeзначення 21-25, щоб отримати фігури, які мають незалежне налаштування для внутрішнього ( fill) та межевого ( col) кольорів, наприклад:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

введіть тут опис зображення

Однак я не можу зрозуміти, як контролювати товщину меж фігури, ні встановлюючи їх абсолютно, ні як естетичне відображення. Зауважу, що якщо я встановлюю lwdзначення, це перевершує sizeестетичне:

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)

введіть тут опис зображення

Як контролювати товщину кордону?

Відповіді:


107

Починаючи з версії 2.0.0 ggplot2 , є аргумент для товщини межі контрольної точки. З NEWS.mdфайлу:

geom_point () отримує естетику обведення, яка контролює ширину меж фігур 21-25 (# 1133, @SeySayux). Розмір та штрих є адитивними, тому точка з розміром = 5 та штрихом = 5 матиме діаметр 10 мм. (# 1142)

Отже, правильним рішенням цього є зараз:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)

Вихідні дані


1
Чи можете ви додати результат?
Томас

3
Для подальшої сумісності та ясності було б непогано сказати "Починаючи з версії x.xx", а не "остання версія".
Грегор Томас

Чи існує спосіб контролю товщини штриха на основі змінних? Щось на зразок "scale_stroke_manual"?
Ricecakes

2
Як відповідь на мій власний коментар вище, ми можемо використовувати scale_discrete_manual. Дивіться посилання тут: github.com/tidyverse/ggplot2/issues/3507#issuecomment-526212978
Ricecakes

17

Це відчуває себе трохи невдало, але ви можете додати " фоновий " набір точок із розміром, встановленим до естетичного відображення, а також деяку невелику константу, щоб збільшити межу точок. Пограйте з константою, щоб отримати бажану ширину меж.

Вам також доведеться відключити легенду розміру, щоб зупинити її відображення легенди на графіку ...

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+
  scale_size( guide = "none" )+
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

введіть тут опис зображення


2
Можливо, хакей, але Хедлі схвалив цей метод у Twitter
Ноам Росс

1
@NoamRoss у вас є посилання на це?
Саймон О'Хенлон

1

Інше рішення - створити графік у R, а потім експортувати його у файл .svg. Потім можна змінити ширину лінії за допомогою програмного забезпечення для редагування векторної графіки (наприклад, Inkscape). Цей метод особливо корисний, коли точки даних перекриваються.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.