【问题标题】:How to keep equal relative sizes of points in a graph?如何保持图中点的相对大小相等?
【发布时间】:2018-09-22 07:05:30
【问题描述】:

我想制作一个图表,其中圆圈的大小表示样本的大小。如果我在 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()

【问题讨论】:

  • cex=100*t$size[t$r=='0'] & cex=100*t$size[t$r=='1']

标签: r plot graph weighted


【解决方案1】:

您必须稍微更改函数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()

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()

图表完全一样,但可能代码更具可读性。

最后,请注意我在p2()p2_alt() 中都添加了参数xlabylab

【讨论】:

  • 是的,向量的长度不同。这看起来没问题。这似乎违反直觉:(
  • @RayTayek 等等,我会用解释和图表来编辑。
  • @RayTayek 完成,查看新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2019-07-31
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多