как наложить коробчатую диаграмму на диаграмму рассеяния? - PullRequest
1 голос
/ 20 июня 2020

поддельные данные

set.seed( 123)
x<-rnorm(1000, mean=60,sd=20)
y <-  exp(-10 +  .95*log(x^3)) + rnorm(1000,mean=1,sd=1)
df <- data.frame(x,y)
cls.x <- quantile(df$x, seq(.1, .9, by=.1))
df$x.class <- findInterval(df$x, cls.x)
df$x.class <- as.factor(df$x.class)
head(df)

Ни следующая работа

plot(df$x,df$y,col=3)
par(new=T)
boxplot(y~x.class, data=df,xlab="",ylab="",xaxt="n")

, ни эта

boxplot(y~x.class, data=df,xlab="",ylab="",xaxt="n")
points(df$x,df$y,col=3)

Используя ggplot, ближе всего, что я получаю, используется что-то вроде

library(ggplot2)
ggplot(df,aes(x.class,y))+geom_boxplot() + geom_point()

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

Любое предложение было бы очень признательно.

Ps: Я известно о функции bplot.xy () в Rlab, однако эта функция не позволяет мне изменять цвета блочной диаграммы или сначала рисовать точки.

library(Rlab)
bplot.xy( x,y,  N=10)
points( x,y, pch=".", col=3, cex=3)

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Ваш df$x варьируется от 3 до 124, тогда как ваша ось x находится от 1 до 10. В базовой графике вы можете сделать это:

plot(jitter(as.integer(df$x.class)), df$y, col=3, type="p", xlab = "", ylab = "", xaxt = "n")
boxplot(y~x.class, data=df,xlab="",ylab="",xaxt="n", add = TRUE)

Я добавил jitter, чтобы помочь сломать из распределения. Вы также можете попробовать pch=16, чтобы сделать точки solid, и, возможно, использовать прозрачность (например, col="#aaffaa22" для точек).

базовая диаграмма разброса

1 голос
/ 20 июня 2020

Это то, что вы хотите?

library(ggplot2)

ggplot(df, aes(x, y, fill = x.class)) + 
  geom_point(alpha = 0.10) +
  geom_boxplot(alpha = 0.50)  

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...