Как сохранить равные относительные размеры точек на графике? - PullRequest
0 голосов
/ 22 сентября 2018

Я хочу сделать график, на котором размеры кружков обозначают размер выборки.если я использую plot в p1 (), он работает нормально.

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

Как бы получить обакрасные и зеленые круги одинакового размера?

p1<-function() {
    plot(t$x,t$y,cex=100*t$size,xlim=c(0,1),ylim=c(0.,1.))    
}
p2<-function() {
    plot(t$x[t$r=="0"],t$y[t$r=="0"],xlim=c(0,1),ylim=c(0.,1.),cex=100*t$size,col="red")
    points(t$x[t$r=="1"],t$y[t$r=="1"],xlim=c(0,1),ylim=c(0.,1.),cex=100*t$size,col="green")
}
l<-20
x<-seq(0,1,1/l)
y<-sqrt(x)
r=round(runif(n=length(x),min=0,max=.8))
n<-1:length(x)
size=n/sum(n)
t<-data.frame(x,y,r,n,size)
t$r<-factor(r)
str(t)
p1()

1 Ответ

0 голосов
/ 22 сентября 2018

Вы должны немного изменить функцию p2.Вы используете t$size, все это, когда вы должны быть подмножеством с коэффициентом t$r, так как вы делаете это при построении точек.

Если вы строите t$x[t$r == "0"] против t$y[t$r == "0"], тогда вы должны использовать размеры, соответствующие тем точкам, которые t$size[t$r == "0"].В качестве альтернативы, вы можете сначала установить поднабор фрейма данных t, а затем использовать эти два результирующих фрейма данных для построения точек.См. Функцию p2_alt в конце.

p2 <- function() {
  plot(t$x[t$r == "0"], t$y[t$r == "0"],
       xlim = c(0, 1), ylim = c(0., 1.),
       cex = 100*t$size[t$r == "0"],
       col = "red",
       xlab = "x", ylab = "y")
  points(t$x[t$r == "1"],
         t$y[t$r == "1"],
         xlim = c(0, 1), ylim = c(0., 1.),
         cex = 100*t$size[t$r == "1"],
         col = "green")
}

set.seed(651)    # make the results reproducible

l <- 20
x <- seq(0, 1, 1/l)
y <- sqrt(x)
r <- round(runif(n = length(x), min = 0, max = 0.8))
n <- 1:length(x)
size <- n/sum(n)
t <- data.frame(x, y, r, n, size)
t$r <- factor(r)
#str(t)
#p1()
p2()

graph relative points size

p2_alt <- function() {
  df1 <- subset(t, r == "0")
  df2 <- subset(t, r == "1")
  plot(df1$x, df1$y,
       xlim = c(0, 1), ylim = c(0., 1.),
       cex = 100*df1$size,
       col = "red",
       xlab = "x", ylab = "y")
  points(df2$x,
         df2$y,
         xlim = c(0, 1), ylim = c(0., 1.),
         cex = 100*df2$size,
         col = "green")
}

p2_alt()

График точно такой же, но, возможно, код более читабелен,

Наконец, обратите внимание, что я добавил аргументы xlab и ylab к обоим p2() и p2_alt().

...