7

我正在使用 ggplot2 生成各种图,其中一个点的大小与具有相同 x 和 y 值的案例数量成正比。有没有办法使点的大小在具有不同值的不同地块之间具有可比性size

使用假数据的示例:

    df1 = data.frame(x = seq(1:10), 
            y = c(4,3.8,3.8,3.2,3.1,2.5,2,1.5,1.2,1.3),
            size = c(1,20,1,70,100,70,1,1,110,1))

    library(ggplot2)

    pdf("plot.1.pdf")
    ggplot(df1, aes(x = x, y = y, size = size)) + geom_point()
    dev.off()

    df2 = data.frame(x = seq(1:10), 
            y = c(4,3.8,3.8,3.2,3.1,2.5,2,1.5,1.2,1.3),
            size = rep(1,length(y)))
    pdf("plot.2.pdf")
    ggplot(df2, aes(x = x, y = y, size = size)) + geom_point()
    dev.off()

情节 1 中的点都size等于 1,比情节 2 中等于 1 的点大得多size。我需要一个版本的情节,其中具有相同值的点size在不同的情节中具有相同的大小。谢谢,

苏菲亚

4

1 回答 1

15

一种可能性是使用scale_size_identity()- 这将size直接解释为点大小的单位,因此在两个图中,值为 1 的点将具有相同的大小。size但是,如果值很大(如您的情况),这种方法会产生太大的影响。处理点太大的问题,可以使用尺度内的变换,例如平方根,带参数trans="sqrt"

ggplot(df1, aes(x = x, y = y, size = size)) + 
  geom_point()+scale_size_identity(trans="sqrt",guide="legend")

ggplot(df2, aes(x = x, y = y, size = size)) + 
  geom_point()+scale_size_identity(trans="sqrt",guide="legend")

在此处输入图像描述

在此处输入图像描述

更新

正如@hadley 所指出的,实现这一点的最简单方法是在limits=内部设置scale_size_continuous()相同的值以获得相同的大小。

ggplot(df1, aes(x = x, y = y, size = size)) + geom_point()+
  scale_size_continuous(limits=c(1,110))
ggplot(df2, aes(x = x, y = y, size = size)) + geom_point()+
  scale_size_continuous(limits=c(1,110))

在此处输入图像描述 在此处输入图像描述

于 2013-04-22T10:30:58.477 回答