Подтвердить что ты не робот

Поместите границу вокруг точек

Я хотел бы разместить черную рамку вокруг точек на диаграмме рассеяния, которые заполняются на основе данных, используя 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), я не понимаю, почему это не похоже на то, чтобы отобразить цвет на что угодно! Любая помощь?

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

4b9b3361

Ответ 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))