Толщина границы контрольной точки в ggplot

При использовании 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)

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

Как мне контролировать толщину границы?


person Noam Ross    schedule 21.10.2013    source источник


Ответы (3)


Начиная с версии 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)

Вывод< / а>

person Noam Ross    schedule 18.12.2015

Это кажется немного хакерским, но вы можете добавить набор точек «фон» с размером, установленным для эстетического сопоставления, плюс небольшую константу для увеличения границы точек. Поиграйте с константой, чтобы получить желаемую ширину границы.

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

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)

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

person Simon O'Hanlon    schedule 21.10.2013
comment
Может быть, хоккей, но Хэдли одобрил этот метод в Твиттере. - person Noam Ross; 22.10.2013
comment
@NoamRoss у вас есть ссылка на это? - person Simon O'Hanlon; 22.10.2013

Другое решение - создать график в R, а затем экспортировать его в файл .svg. Затем ширину линии можно изменить с помощью программного обеспечения для редактирования векторной графики (например, Inkscape). Этот метод особенно полезен, когда точки данных перекрываются.

person Gopal Penny    schedule 03.03.2015