3

我在 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)从而得出如下图: 示例 1

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

4

3 回答 3

3

scale_size_area你也可以看看ggplot

# 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,我借此机会引用@Bert Gunter在 R-help 上的帖子:

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

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

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

在同一线程中,@Gabor Grothendieck 指向这篇不错的文章,其中使用了该base函数symbols。一个例子是“[c] 圆 [are] 不正确地按半径而不是面积来确定大小。大的值看起来要大得多”,还有一个例子是“圆 [are] 按面积正确确定大小”,以及inches参数用于设置大小的例子最大的泡沫。我认为这可能base相当于scale_size_area()in ggplot

于 2013-09-18T09:50:24.930 回答
1

log用of绘制weighting大小如何?

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

于 2013-09-18T09:37:29.933 回答
0

该功能pmax可能会有所帮助:

minCex <- 1
plot(x, y, cex = pmax(minCex, weighting / 5))
于 2013-09-18T09:35:10.373 回答