我不知道这种情节的名称(欢迎对此发表评论)。本质上,它是一个带有字形的条形图,已填充该字形以指示损失/ yield 。字形像箭头一样,编码有关方向,大小的信息,并允许查看下方的条形几何图形。

这看起来很有趣,但无法想到如何在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)

最佳答案

这是一个例子,也许还有其他方法,

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()

关于r - 差异图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26248671/

10-10 15:36