我试图在ggplot中绘制一个时间序列,使年度值与geom_line()相关联,并且总计在x轴的最右侧显示为单独的geom_point()。
我试图在审美范围内对数据进行子集化,但得到错误:
Aesthetics must be either length 1 or the same as the data (1): x, y
我也试过使用两个不同的数据帧,但得到了类似的错误。对不起,如果这是一个基本问题,但我没有找到解决方案的运气。
请参阅下面的虚拟数据集和ggplot2脚本。我希望最终的情节看起来像这样,但没有连接'2017'和'total'的线,最好不必在Adobe Illustrator中编辑输出!
任何帮助表示赞赏。
library(ggplot2)
##synthetic data
Year <- seq(1996,2017)
var1 <- sample(0:10,length(Year), replace=TRUE)
var2 <- sample(0:10,length(Year), replace=TRUE)
var3 <- sample(0:10,length(Year), replace=TRUE)
var4 <- sample(0:10,length(Year), replace=TRUE)
total <- c("total",sample(0:10,4, replace=TRUE))
dat <- data.frame(Year, var1,var2,var3,var4)
dat <- rbind(dat,total)
plt <- ggplot(data=dat, aes(x=Year))
plt <- plt +
geom_point(aes(y=var1, colour = "var1")) +
geom_point(aes(y=var2, colour = "var2")) +
geom_point(aes(y=var3, colour= "var3")) +
geom_point(aes(y=var4, colour = "var4")) +
geom_line(aes(y=var1, group=1, colour = "var1")) +
geom_line(aes(y=var2, group=1, colour="var2")) +
geom_line(aes(y=var3, group=1, colour="var3"))+
geom_line(aes(y=var4, group=1, colour= "var4")) +
scale_colour_manual("",
breaks = c("var1", "var2", "var3", "var4"),
values = c("#d7191c","#fdae61","#abd9e9","#2c7bb6"))
答案 0 :(得分:2)
最好将总数据保存在另一个data.frame中。重塑数据大大简化了ggplot命令。
##reshape data
dat <- data.frame(Year, var1,var2,var3,var4)
dat <- tidyr::gather(dat, key = var, value = value, -Year)
##data.frames of totals
total <- data.frame(Year = max(Year) + 1, var = paste0("var", 1:4), value = sample(0:10,4, replace=TRUE))
dat <- rbind(dat,total)
plt <- ggplot(data=dat, aes(x=Year, y = value, colour = var)) +
geom_point() +
geom_line() +
geom_point(data = total) +
scale_colour_manual("", values = c("#d7191c","#fdae61","#abd9e9","#2c7bb6")) +
##change xaxis to show "total"
scale_x_continuous(breaks = c(seq(min(dat$Year), max(dat$Year), 2), total$Year[1]),
labels = c(seq(min(dat$Year), max(dat$Year), 2), "Total"))
plt
答案 1 :(得分:1)