我不知道这种情节的名称(欢迎提出这方面的意见)。基本上它是一个带有字形的条形图,它们被填充以表示损失/收益。字形像箭头一样编码有关方向,大小的信息,并允许看到下方的条形图。
这看起来很有趣,但无法在ggplot2
(网格框架工作)中考虑如何做到这一点。我们怎么能在ggplot2 / grid框架中重新创建这个图(基础解决方案也欢迎问题的完整性)。特别是字形,而不是文本,因为这在ggplot2中非常直接。
以下是一些用于创建数据和传统覆盖的代码。坐标翻转躲避条形图和折线图,以显示可视化此类数据的典型方法。
set.seed(10)
x <- sample(30:60, 12)
y <- jitter(x, 60)
library(ggplot2)
dat <- data.frame(
year = rep(2012:2013, each=12),
month = rep(month.abb, 2),
profit = c(x, y)
)
ggplot() +
geom_bar(data=subset(dat, year==2012), aes(x=month, weight=profit)) +
geom_bar(data=subset(dat, year==2013), aes(x=month, weight=profit), width=.5, fill="red")
ggplot(dat, aes(x=month, fill=factor(year))) +
geom_bar(position="dodge", aes(weight=profit)) +
coord_flip
ggplot(dat, aes(x=month, y=profit, group = year, color=factor(year))) +
geom_line(size=1)
答案 0 :(得分:11)
这是一个例子,也许还有其他方法,
dat <- data.frame(
year = rep(2012:2013, each=12),
month = factor(rep(1:12, 2), labels=month.abb),
profit = c(x, y)
)
dat2 <- reshape2::dcast(dat, month~ year, value.var = "profit")
names(dat2)[2:3] <- paste0("Y", names(dat2)[2:3])
ggplot(dat2) +
geom_bar(aes(x=month, y = Y2012), stat = "identity", fill = "grey80", width = 0.6) +
geom_segment(aes(x=as.numeric(month)-0.4, xend = as.numeric(month)+0.4, y = Y2013, yend = Y2013)) +
geom_segment(aes(x = month, xend = month, y = Y2013, yend = Y2012, colour = Y2013 < Y2012),
arrow = arrow(60, type = "closed", length = unit(0.1, "inches")), size = 1.5) +
theme_bw()