我目前正在处理" 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的一部分而不是。有什么不同?感谢
答案 0 :(得分:3)
需要在aes()
内的数据框中设置美学映射 - 只有aes()
ggplot
内部xend = 0
知道在数据框中查找列名称。
常量,例如您的color = "red"
或aes()
,如果您想将所有点着色为红色,可以设置在aes()
内,但它通常首选将它们设置在xend = 0
之外。对于类似颜色的东西,这不会自动创建图例(如果只有一种颜色,通常不需要颜色图例)。同样,在您的示例中,您看到将aes()
置于aes
内使其“明确地成为比例”的一部分。
在 aes
内设置一个常量相当于将该列添加到数据框然后映射它,在e<-extract(r,line,cellnumbers=T)[[1]]
之外告诉ggplot“嘿,这样做,但是不要担心将其添加到数据框或图例或任何“。