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

时间:2016-02-08 23:39:39

标签: r 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尺寸字段是df_1&#39;的尺寸的10倍:

df_1_plot

df2_plot

我正在寻找df_2_plot中的磅值比df_1_plot中的点大10倍。

1 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是手动调整比例,使用// The below two lines will split the columns as well as trim the DBOULE QUOTES around values but NOT within them string trimmedLine = line.Trim(new char[] { '\"' }); List<string> values = trimmedLine.Split(new string[] { "\",\"" }, StringSplitOptions.None).ToList(); 将其固定到原始数​​据帧比例以及指定的比例常量 - 任何常量都应该有效,尽管使用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))) 而不是scale_size_identity()提到的lukeA以更优雅的方式实现了相同的结果。