Поместите границу вокруг точек
Я хотел бы разместить черную рамку вокруг точек на диаграмме рассеяния, которые заполняются на основе данных, используя ggplot2. Кроме того, я хотел бы избежать записи легенды для черной границы, поскольку она будет на каждой точке. В основном я ищу этот сюжет, но с черной рамкой вокруг каждой точки.
df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y))+geom_point(aes(colour=id), size=12)
![the plot I want, except it doesn't have borders around the points]()
В качестве бонуса, я бы хотел, чтобы у меня не было легендарной записи для черной границы. Моя лучшая попытка:
df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id, colour="black"), size=12)
Что дает:
![not at all the plot I want]()
Я не понимаю, почему это не дает мне то, что я хочу, и что еще хуже (для моего обучения в ggplot2), я не понимаю, почему это не похоже на то, чтобы отобразить цвет на что угодно! Любая помощь?
Возможно, если я смогу получить правильное отображение схемы и заливки, я могу использовать взломать, как тот, который находится в последнем наборе цифр здесь, чтобы отключить легенду.
Ответы
Ответ 1
Это немного неясно, но вы должны использовать pch
> 20 (думаю, 21:25 - соответствующие формы): fill
управляет кольцом colo (u), а colour
управляет строкой вокруг края.
(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id),
colour="black",pch=21, size=5))
update: с недавними версиями ggplot2 (например, 2.0.0, не знаю, как далеко назад), руководство по умолчанию - это colourbar. Вам понадобится g0 + guides(fill="legend")
, чтобы получить легенду с точками, как показано на рисунке. Поломки по умолчанию также изменились: чтобы точно воспроизвести этот график, вам нужно g0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))
...
![enter image description here]()
Связано, но не идентично: как создать сюжет с настраиваемыми точками в R?. Принятый ответ на этот вопрос использует технику расслоения, показанную в ответе @joran, но (IMO) ответ by @jbaums, который использует технику pch=21
, превосходит. (Я думаю, что shape=21
является альтернативой и, возможно, даже предпочтительнее, pch=21
.)
PS вы должны поместить colour
вне отображение (aes
бит), если вы хотите установить его абсолютно, а не в соответствии со значением некоторой переменной...
Ответ 2
Первый вопрос:
ggplot(df, aes(x=x, y=y)) +
geom_point(aes(colour=id), size=12) +
geom_point(shape = 1,size = 12,colour = "black")
И, о, вам не нужна дополнительная легенда. Я думаю, что он делает это:
![enter image description here]()
Ответ 3
У меня была такая же проблема, но мне нужно было решение, которое также допускало джиттер. Для этого вам нужно использовать pch, который является заполненной формой с границей и функцией grid.edit из пакета gridExtra. Используя ваш пример:
df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y, fill=id))+geom_point(pch=21, colour="Black", size=12)
library(gridExtra)
grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = 3))
Ответ 4
Как получить границу в этом коде, где я настроил конкретную цветовую шкалу, которую я хочу сохранить:
temp_plot = ggplot(aggregate0, aes(x = frequency, y = amount, color = recency)) + geom_point(size=3) + scale_color_gradient2(limits = c(0,4.12), midpoint = 2.5, breaks = seq(0,4,1), low="green", mid="yellow", high="red", space ="Lab") + labs(title = "Mean Value\n", x = "Total # of Gifts", y = "Avg $", color = "Recency") + scale_x_continuous(breaks=seq(0,50,5)) + scale_y_continuous(breaks=seq(0,1250,50))