有没有办法在ggplot2中保持对大小比例的绝对控制

我想基于特定字段的值来指定点的大小,但是我希望能够具有跨越一系列独立生成的图表的大小比例.

基本上我希望能够说X单位的值应该以大小为Y的点显示.

一个例子如下

library(ggplot2)

df_1 <- data.frame(x=c(1:3),y=rep(1,3),size=10*c(1:3))
df_2 <- data.frame(x=c(1:3),y=rep(1,3),size=100*c(1:3))

df_1_plot <- ggplot(df_1,aes(x=x,y=y,size=size)) +
  geom_point()

df_2_plot <- ggplot(df_2,aes(x=x,y=y,size=size)) +
  geom_point()

df_1_plot将生成与df_2_plot不同比例的图表,尽管df_2 size字段是df_1的10倍:

《有没有办法在ggplot2中保持对大小比例的绝对控制》

《有没有办法在ggplot2中保持对大小比例的绝对控制》

我在寻找df_2_plot中的点大小比df_1_plot中的点大10倍.

最佳答案 实现此目的的一种方法是手动调整刻度以使用scale_size_continuous()以及指定的缩放常量将它们固定到原始数​​据帧比例 – 任何常量都应该起作用,尽管使用min(df_1 $size)可以使尺寸更易于管理.这样每个点的大小都与相同的任意常数相关(在这种情况下为min(df_1 $size))

然后代码看起来像:

ggplot(df_1,aes(x=x,y=y,size=size)) + 
geom_point() + 
scale_size_continuous(range = c(min(df_1$size)/min(df_1$size), max(df_1$size)/min(df_1$size))) 

ggplot(df_2,aes(x=x,y=y,size=size)) + 
geom_point() + 
scale_size_continuous(range = c(min(df_2$size)/min(df_1$size), max(df_2$size)/min(df_1$size)))

然而,正如lukeA提到的使用scale_size_identity()而不是scale_size_continuous()以更优雅的方式实现了等效结果.

点赞