你会如何在 R 中复制这个图形

How would you replicate this graphic in R

我想知道如何在 R 中绘制此图?

我决定使用 ggplot 包中的 geom_bar。但是我不知道如何绘制变化的厚度和同时反映多年增长的颜色。

如果有任何想法,我将不胜感激。

谢谢。

以下是开始的一些步骤。没什么特别的,只是一些矩形。这张图表中有很多信息,大部分都在旁边的文字中,通常意味着图表不是很有效。

图表真正显示的唯一有用信息是颜色的年度变化。你可以做类似下面我根据矩形高度着色的事情。

但 +1 是因为找到了另一种可视化数据的方法。

set.seed(1)
nr <- 4
nc <- 50
mm <- matrix(sort(runif(nr * nc)) * 10, nr, nc)
nn <- matrix(sort(runif(nr * nc), decreasing = TRUE) * 10, nr, nc)
mm <- do.call('rbind', l <- list(mm, nn))[order(sequence(sapply(l, nrow))), ]

yy <- 50
mm <- rbind(mm, yy - colSums(mm))
nr <- nrow(mm)

plot(0:nc, type = 'n', ylim = c(0, yy), bty = 'n', axes = FALSE, ann = FALSE)
rect(s <- sequence(nc), 0, s + .95, mm[1, ], border = NA,
     col = as.numeric(cut(mm[1, ], breaks = seq(0, 15, 3))))
axis(1, s + .5, labels = s + 2000, lwd = 0, lwd.ticks = 1)
axis(1, s, labels = NA, lwd = 0, lwd.ticks = .5, tcl = -.2)
# axis(2, las = 1, lwd = 0)
mtext('Share of private jobs', side = 2, at = par('usr')[3], adj = 0)
arrows(.5, 0, .5, yy, lwd = 2, xpd = NA, length = .1)
text(par('usr')[1:2] + c(.5, -.5), yy, labels = range(s) + 2000,
     xpd = NA, pos = 3, adj = 0)

yy <- matrix(0, 1, nc)
for (ii in 2:nr) {
  yy <- colSums(rbind(yy, mm[ii - 1, ]))
  rect(s, yy  + 1, s + .95, yy + mm[ii, ], border = NA, 
       col = as.numeric(cut(mm[ii, ], breaks = seq(0, 15, 3))))
}

(我希望没有人将此提交到垃圾图表 :{ )

这里还有另一种非常简单的方法。应该首先完成此操作,即创建示例数据、填充行,然后让 barplot 处理其余部分。但是,对这种方法的控制要少得多。

mm <- matrix(sort(runif(10)), 2) * 10
nn <- matrix(.5, 2, ncol(mm))
mm <- do.call('rbind', l <- list(mm, nn))[order(sequence(sapply(l, nrow))), ]
yy <- 22
mm <- rbind(mm, yy - colSums(mm))
barplot(mm, col = 1:0, border = NA, axes = FALSE)