我想基于特定字段的值来指定点的大小,但是我希望能够具有跨越一系列独立生成的图表的大小比例.
基本上我希望能够说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倍:
我在寻找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()以更优雅的方式实现了等效结果.