How to ggplot partial values with only max in whis

2019-06-11 10:01发布

问题:

I am thinking how to present partial values in whisker plot/... M2 has only the max. Both measurements do not hav Code which output in Fig. 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)

Values at start

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

Fig. 1 Output where no visualisations when only max value exists

The presentation of M1 is also weird in the barplot becuase no absolute values in data, designed initially in absol.

Expected output: mark maximum value in M2 presentation

OS: Debian 8.7
R: 3.4 (backports)

回答1:

Add a column to absol, call it yMin, that will set the min value to the max value if the min value is missing.

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

Then, when plotting, have the geom_errorbar use yMin in the aesthetics.

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



标签: r ggplot2