Вы не предлагаете никаких данных, поэтому я отвечу некоторыми искусственными данными, построенными внизу поста.Вы также не говорите, сколько данных у вас есть, хотя вы говорите, что это большое количество баллов.Я иллюстрирую с 20000 баллов.
Вы использовали номер группы в качестве символа черчения для обозначения группы.Мне трудно это читать.Но просто нанесение точек не показывает группы хорошо.Окрашивание каждой группы в разные цвета - это начало, но выглядит не очень хорошо.
plot(x,y, pch=20, col=rainbow(3)[group])
Два трюка, которые могут заработать много очковболее понятны:
1. Сделайте точки прозрачными.Густые места будут казаться темнее.И
2. Уменьшите размер точки.
plot(x,y, pch=20, col=rainbow(3, alpha=0.1)[group], cex=0.8)
Это выглядит несколько лучше, но не соответствует вашему фактическому запросу.Ваш образец изображения, кажется, показывает эллипсы доверия.Вы можете получить их, используя функцию dataEllipse
из пакета car
.
library(car)
plot(x,y, pch=20, col=rainbow(3, alpha=0.1)[group], cex=0.8)
dataEllipse(x,y,factor(group), levels=c(0.70,0.85,0.95),
plot.points=FALSE, col=rainbow(3), group.labels=NA, center.pch=FALSE)
Но если очков действительно многоточки могут по-прежнему накладываться так сильно, что они просто сбивают с толкуВы также можете использовать dataEllipse
, чтобы создать то, что в основном представляет собой двухмерный график плотности, не показывая точек вообще.Просто нанесите несколько эллипсов разных размеров друг на друга, заполнив их прозрачными цветами.Центр распределения будет выглядеть темнее.Это может дать представление о распределении для очень большого количества точек.
plot(x,y,pch=NA)
dataEllipse(x,y,factor(group), levels=c(seq(0.15,0.95,0.2), 0.995),
plot.points=FALSE, col=rainbow(3), group.labels=NA,
center.pch=FALSE, fill=TRUE, fill.alpha=0.15, lty=1, lwd=1)
Вы можете получить более непрерывный вид, построив график болееэллипсы и опуская границы.
plot(x,y,pch=NA)
dataEllipse(x,y,factor(group), levels=seq(0.11,0.99,0.02),
plot.points=FALSE, col=rainbow(3), group.labels=NA,
center.pch=FALSE, fill=TRUE, fill.alpha=0.05, lty=0)
Пожалуйста, попробуйте различные комбинации из них, чтобы получить хорошее представление о ваших данных.
Дополнительный ответ на комментарий: Добавление меток Пожалуй, наиболее естественным местом для добавления меток групп являются центры эллипсов.Вы можете получить это, просто вычислив центроиды точек в каждой группе.Так, например,
plot(x,y,pch=NA)
dataEllipse(x,y,factor(group), levels=c(seq(0.15,0.95,0.2), 0.995),
plot.points=FALSE, col=rainbow(3), group.labels=NA,
center.pch=FALSE, fill=TRUE, fill.alpha=0.15, lty=1, lwd=1)
## Now add labels
for(i in unique(group)) {
text(mean(x[group==i]), mean(y[group==i]), labels=i)
}
Обратите внимание, что я просто использовал номер в качестве метки группы, но если у вас есть более сложное имя, выможет изменить labels=i
на что-то вроде labels=GroupNames[i]
.
Данные
x = c(rnorm(2000,0,1), rnorm(7000,1,1), rnorm(11000,5,1))
twist = c(rep(0,2000),rep(-0.5,7000), rep(0.4,11000))
y = c(rnorm(2000,0,1), rnorm(7000,5,1), rnorm(11000,6,1)) + twist*x
group = c(rep(1,2000), rep(2,7000), rep(3,11000))