如何ggplot部分值只有最大的胡须图?

时间:2017-05-21 18:10:29

标签: r ggplot2

我正在考虑如何在须状图中呈现部分值/ ... M2只有最大值。 两种测量都没有 输出的代码如图1所示

library("reshape2")
library("ggplot2")

ds <- structure(list(Vars = c("M1", "M2", "M1", "M2", "M1", "M2"), 
variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L), .Label = c("Max", 
"Ave", "Min"), class = "factor"), value = c("150", 
"61", " 60", NA, " 41", NA)), row.names = c(NA, -6L), .Names = c("Vars", 
"variable", "value"), class = "data.frame")

# http://stackoverflow.com/q/44100187/54964 eipi10
ds$value = as.numeric(ds$value)

# http://stackoverflow.com/a/44090815/54964
minmax <- ds[ds$variable %in% c("Min","Max"), ]
absol  <- ds[ds$variable %in% c("Ave"), ]
# absol  <- ds[ds$variable %in% c("Ave", "Absolute"), ]
minm   <- dcast(minmax, Vars ~ variable)
absol  <- merge(absol, minm, by = "Vars", all.x = T)

absol

ggplot(absol, aes(x = Vars, y = value, fill = variable)) +
        geom_bar(stat = "identity") +
        geom_errorbar(aes(ymin = Min, ymax = Max), width = .25)

开始时的值

            Max      Ave       Min Vars
M1          150       60        41   M1
M2           61     <NA>      <NA>   M2

图。 1当仅存在最大值时没有可视化的输出

enter image description here

M1的呈现在条形图中也很奇怪,因为数据中没有绝对值,最初是在absol中设计的。

预期输出:在M2演示

中标记最大值 操作系统:Debian 8.7
R:3.4(后退)

1 个答案:

答案 0 :(得分:1)

absol添加一列,称之为yMin,如果缺少最小值,则会将最小值设置为最大值。

absol$yMin <- ifelse(is.na(absol$Min), absol$Max, absol$Min)

然后,在绘图时,让geom_errorbar在美学中使用yMin

ggplot(absol, aes(x = Vars, y = value, fill = variable)) +
        geom_bar(stat = "identity") + 
        geom_errorbar(aes(ymin = yMin, ymax = Max), width = .25)

enter image description here