【问题标题】:R: changing the size of some (but not all) plotted data points according to their weightingR:根据权重改变一些(但不是全部)绘制数据点的大小
【发布时间】:2013-09-18 22:56:16
【问题描述】:

我在 R 中生成了一个图,其中每个数据点的大小与其各自的权重相对应,例如:

x <- runif(10, 2, 200) 
y <- runif(10, 5.0, 7.5)
weighting <- c(1, 1, 1, 1, 1, 10, 15, 15, 25, 25)

我已经用cex调整了绘制数据点的大小:

plot(x, y, cex = weighting)

由于图中的某些数据点的权重系数很高,因此我将所有点的大小减小了plot(x, y, cex = weighting/5),这将给出如下图:

不幸的是,权重较小的数据点现在很小。我确信有可能将大小限制为仅具有高权重因子的那些点,并以正常大小绘制其他点(i.e. weighting = 1)。我不知道该怎么做,有人可以帮忙吗?

【问题讨论】:

  • 为什么不用 ifelse 呢? plot(x, y, cex = ifelse(weighting>1, weighting/5, weighting))
  • 谢谢,这行得通!令人惊讶的是,我还不知道 ifelse 命令,但它似乎对许多用途都非常有用......

标签: r plot


【解决方案1】:

您还可以在ggplot 中查看scale_size_area

# you need to keep your data in a data.frame
df <- data.frame(x = x, y = y, weighting = weighting)
ggplot(data = df, aes(x = x, y = y, size = weighting)) +
  geom_point() +
  scale_size_area()

更新,关于 cex 和点大小的缩放
因为题主是cex,所以在R-help上借机引用a post by @Bert Gunter

“问题来了:为了准确 表示值,“点”=圆面积必须成比例 到价值。也就是说,眼睛“看到”的是区域,而不是半径,因为 点“大小”。一个令人愉快的参考是 Howard Wainer 的 1982 大约(不记得确切)美国统计学家的文章, “如何糟糕地绘制数据”(或者可能是“绘制”数据)。

无论如何,使用cex,我不知道用cex绘制的点是否= 1.23 是面积或半径的 1.23 倍——或者两者都不是——一个点 用 cex =1 绘制。确实,可能因人而异 实现/操作系统/图形字体。所以对我来说“画画”似乎更好 带有符号()的点,您可以完全控制 大小。

显然,如果我错了,请告诉我。”结束引用。

在同一线程中,@Gabor Grothendieck 指向 this nice article,其中使用了 base 函数 symbols。一个例子是“[c] 圆 [are] 不正确地按半径而不是面积来确定大小。大的值看起来更大”,一个例子是“圆 [are] 按面积正确确定大小”,并且还使用了 inches 参数设置最大气泡的大小。我认为这可能是一个base 相当于ggplot 中的scale_size_area()

【讨论】:

  • user2790580,我已经更新了我的答案,并在cex 和点的大小上做了一个小注释。
  • @user2790580,很高兴您发现我的回答很有帮助!
【解决方案2】:

logweighting 绘制大小如何?

plot(x, y, cex = log10(weighting))

【讨论】:

    【解决方案3】:

    pmax 函数可能会有所帮助:

    minCex <- 1
    plot(x, y, cex = pmax(minCex, weighting / 5))
    

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2022-01-01
      • 2022-09-14
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多