xgnd

时间:2017-08-14 14:07:49

标签: r ggplot2

我目前正在处理" R图形食谱"第3章的代码,由用户提供" gaorongchao"在github:

A)给出的代码

install.packages(gcookbook)
library(gcookbook)
tophit <- tophitters2001[1:25, ]
nameorder <- tophit$name[order(tophit$lg, tophit$avg)]
tophit$name <- factor(tophit$name, levels=nameorder)

ggplot(tophit, aes(x=avg, y=name)) +
geom_segment(aes(yend=name), xend=0, colour="grey50") +
geom_point(aes(colour=lg), size=3) +
scale_colour_brewer(palette="Set1", limits=c("NL","AL")) +
theme_bw() +
theme(panel.grid.major.y = element_blank(),
      legend.position=c(1, 0.55),
      legend.justification=c(1, 0.5))    

B)然后我尝试了

的变种
ggplot(tophit, aes(x=avg, y=name)) +
geom_segment(aes(xend=0, yend=name), colour="grey50") +
geom_point(aes(colour=lg), size=3) +
scale_colour_brewer(palette="Set1", limits=c("NL","AL")) +
theme_bw() +
theme(panel.grid.major.y = element_blank(),
      legend.position=c(1, 0.55),
      legend.justification=c(1, 0.5))

其中xend是geom_segment()中aes映射的一部分。 B)导致另一个具有另一个尺度的图形,其中xend = 0明确地是x尺度的一部分。能否以某种方式解释代码A)和B)的这种差异背后的系统性? xend是aes的一部分而不是。有什么不同?感谢

1 个答案:

答案 0 :(得分:3)

需要在aes()内的数据框中设置美学映射 - 只有aes() ggplot内部xend = 0知道在数据框中查找列名称。

常量,例如您的color = "red"aes(),如果您想将所有点着色为红色,可以设置在aes()内,但它通常首选将它们设置在xend = 0 之外。对于类似颜色的东西,这不会自动创建图例(如果只有一种颜色,通常不需要颜色图例)。同样,在您的示例中,您看到将aes()置于aes内使其“明确地成为比例”的一部分。

aes内设置一个常量相当于将该列添加到数据框然后映射它,在e<-extract(r,line,cellnumbers=T)[[1]] 之外告诉ggplot“嘿,这样做,但是不要担心将其添加到数据框或图例或任何“。