stat_summary中的bug和ggplot中的scale_y_log10?

时间:2015-09-04 11:16:32

标签: r ggplot2

我有一个我正在聚合和绘图的数据集:

d <- # set d to the database below.

agg <- aggregate(wt ~ t, data=d, FUN=mean)

# example 1
ggplot(agg, aes(x=t, y=wt)) + geom_line(size = 1.5)

# example 1log
ggplot(agg, aes(x=t, y=wt)) + geom_line(size = 1.5) + scale_y_log10()

# example 2
ggplot(d, aes(x=t, y=wt)) + stat_summary(fun.y="mean", geom="line", size = 1.5)

# example 2log
ggplot(d, aes(x=t, y=wt)) + stat_summary(fun.y="mean", geom="line", size = 1.5) + 
    scale_y_log10()

示例2:

Example 2

示例2log:

Example 2log

问题是即使示例1和2相等,示例1log和2log也不同,示例2log甚至与示例2完全不一致。

我做错了什么或这是一个错误?

我需要使用示例2log,因为我想要聚合不同的条件,例如

ggplot(data, aes(x=t, y=wt)) +
  stat_summary(data=subset(data, dim == 6 & maxt == 32 & max_trials == 10000 & t > 2), fun.y="mean", geom="line", color="black", size = 1.5) + 
  stat_summary(data=subset(data, dim == 6 & maxt == 16 & max_trials == 1000 & t > 2), fun.y="mean", geom="line", color="black", size = 1.5) + scale_y_log10()

这是我正在使用的数据集,它会重现由write.table(d, "test.dat")导出的错误:

"wt" "t"
"7" 12 3
"9" 18 4
"11" 28 6
"13" 14 7
"15" 81 9
"21" 97 10
"23" 3 11
"25" 12 12
"28" 46 13
"35" 1296 15
"37" 63 16
"39" 43 17
"41" 88 18
"43" 395 19
"45" 512 20
"47" 154 21
"49" 9 22
"51" 83 23
"53" 5 24
"55" 1606 25
"57" 3838 26
"59" 1331 27
"74" 23 3
"76" 20 4
"81" 79 5
"83" 32 6
"85" 14 7
"88" 24 8
"89" 9 9
"93" 67 10
"97" 44 11
"98" 18 12
"99" 101 13
"100" 17 14
"101" 19 16
"102" 41 18
"103" 9 19
"105" 26 20
"108" 76 21
"109" 2 22
"113" 883 23
"116" 2054 24
"137" 16 3
"139" 26 4
"140" 4 5
"144" 15 6
"145" 5 7
"150" 31 8
"155" 49 11
"168" 5700 12
"173" 12 3
"176" 40 6
"181" 89 7
"182" 2 8
"183" 4 9
"184" 5 10
"186" 35 11
"194" 357 12
"195" 13 13
"208" 2544 14
"209" 83 15
"210" 168 16
"211" 313 17
"212" 7 18
"213" 48 19
"214" 18 20
"215" 3 21
"216" 35 22
"230" 9 3
"233" 23 4
"235" 60 5
"236" 8 6
"237" 5 7
"238" 23 8
"239" 10 9
"240" 28 10
"241" 8 11
"242" 31 12
"244" 22 13
"245" 12 14
"246" 2 15
"247" 9 16
"261" 3475 17
"266" 1091 18
"267" 53 19
"268" 13 20
"269" 40 22
"270" 264 26
"271" 1726 27
"292" 43 3
"294" 22 4
"301" 48 5
"306" 81 6
"307" 5 7
"308" 25 8
"309" 12 9
"311" 12 10
"315" 63 13
"316" 2 14
"317" 30 15

2 个答案:

答案 0 :(得分:1)

这与通过scale_y_*使用转换时发生转换的时间有关。有用的说明位于coord_trans的帮助页面中,其中包含:

  

转换比例和转换比例之间的区别   坐标系是BEFORE之前发生的尺度转换   统计,然后协调转换。

由于转换发生在您通过stat_summary计算的统计数据之前,因此您的地图2log是log10等级上log10(wt)而不是mean(wt)的平均值的图表。您可以在绘制图表之前计算log10(wt)每个级别t的平均值来验证这一点。

agg2 <- aggregate(log(wt) ~ t, data=d, FUN=mean)

ggplot(agg2, aes(x=t, y=`log(wt)`)) + 
    geom_line(size = 1.5)

该行的形状与2log中的相同。

enter image description here

答案 1 :(得分:0)

非常有趣的问题。我认为stat_summary和不同y尺度的组合表现得很可疑。

我创建了一个简单的例子:

library(ggplot2)

data = data.frame(t=c(1,1,10,10,30,30), wt = c(1,1,20,180,1200,1200))


ggplot(data, aes(x=t, y=wt)) +
  stat_summary(data=data, 
               fun.y="mean", geom="line", color="black", size = 1.5)+
  scale_y_log10()


d <- aggregate(wt ~ t, data=data, FUN=mean)

ggplot(d, aes(x=t, y=wt)) + geom_line(size = 1.5) + scale_y_log10()

我得到的情节是:

enter image description here enter image description here

此外,如果您在没有scale_y_log10的情况下运行上述过程,您将获得完全相同的图表。