R中的龙卷风图

Tornado plot in R

我正在尝试在 R 中制作龙卷风图(a.k.a。灵敏度图)。目标是可视化某些变量增加 10% 和减少 10% 的效果。

到目前为止我得到了这个结果

这是我使用的代码:

# Tornado plot

data <- matrix(c(-0.02,0.02,-0.01,0.01,-0.03,0.02,-0.01,0.04), ncol = 4)
rownames(data) <- c('+10%','-10%')                       # Amount of change in variables
colnames(data) <- c('V_bar', 'alpha', 'rho','xi')        # Names of variables
x <- seq(-0.04,0.04, length=10)                          # For plotting '%' on x-axis

barplot(data, horiz = T, las=1, xlim = c(-0.04,0.04), xaxt='n', ylab = '',
        beside=T, col=c('springgreen','indianred2'))
axis(1, at=pretty(x),  lab=paste0(pretty(x) * 100," %"), las=TRUE)

我有两个最终目标要实现:

  1. 为每个变量对齐条形图(不像现在这样并置)。换句话说,每个可变条的绿色和红色边应该在中心相交,总共有四个条。

  2. 在 y 轴上粘贴数学字符(而不是文本)。 "V_bar" 列应该是顶部有横条的 V。

编辑: 我已经针对数学字符发布了一个单独的问题:

所以你可以拆分正例和负例并用 add = TRUE

绘制相互重叠的图
barplot(data[1,], horiz = T, las=1, xlim = c(-0.04,0.04), xaxt='n', ylab = '',
        beside=T, col=c('springgreen'))
barplot(data[2,], horiz = T, las=1, xlim = c(-0.04,0.04), xaxt='n', ylab = '',
        beside=T, col=c('indianred2'), add = TRUE)
axis(1, at=pretty(x),  lab=paste0(pretty(x) * 100," %"), las=TRUE)

所以我们为一个图取第一行(负值),为第二个图取第二行(正值)。它们的顺序必须匹配,并且它们将并排绘制。

要使其正常工作并匹配得很好,结果必须具有相同的长度,并且每个图表只能指定一种颜色。

Adding greek character to axis title

另一个 post 可能会帮助您解决第二个问题