How do I plot the expected values ​​and the reference value in R?

I am plotting observables per location with dots and errors that work as expected.

Problems:

  • I am also trying to plot the expected value for each location as a short horizontal line, centered the same as the point. I use segments for this, lines appear, however they are not centered and I cannot figure out how to control them.

  • I would like to plot a reference value that will be the same year for all locations, but changes from year to year. I am getting a line with geom_line, but it is oblique and I would like to have steps (or two break lines). With geom_steps, I get the vertical shift at each location, not a year. I tried geom_hline

    , but with the data.frame definition with hline.data<-data.frame(hy=chunk$Reference.Value, hx=chunk$Year)

    a, get two parallel lines across the whole plot.

Could you show me what I am doing wrong? Thank you so much in advance!

Code with my attempts:

library(data.table)
library(ggplot2)

chunk<-fread("
Year;Places;Code;Name;Reference.Value;Value;Expected.Value;CI
2010;Place5;A12;Indicator;0.079;0.087;0.082;0.00286
2010;Place1;A12;Indicator;0.079;0.075;0.086;0.02317
2010;Place2;A12;Indicator;0.079;0.059;0.069;0.01955
2010;Place3;A12;Indicator;0.079;0.065;0.067;0.02712
2010;Place4;A12;Indicator;0.079;0.091;0.101;0.03211
2011;Place5;A12;Indicator;0.077;0.062;0.058;0.00260
2011;Place1;A12;Indicator;0.077;0.078;0.069;0.01736
2011;Place2;A12;Indicator;0.077;0.029;0.037;0.02821
2011;Place3;A12;Indicator;0.077;0.062;0.059;0.02166
2011;Place4;A12;Indicator;0.077;0.110;0.099;0.06452")

chunk[,`:=` (Year     = as.factor(Year),
               Places   = as.factor(Places),
               Code     = as.factor(Code),
               Name     = as.factor(Name)
)]

limits <- aes(ymax = Value+CI, ymin=Value-CI)
dodge <- position_dodge(width=0.9)

p <- ggplot(chunk, aes(colour=Places, fill=Places, y=Value, x=Year))

p + geom_linerange(limits, position=dodge) +
geom_point(position=dodge, size = 5) +
geom_segment(position=dodge,
           aes(group=Places, 
               y=Expected.Value, yend=Expected.Value, 
               x=as.numeric(Year)-0.01, xend=as.numeric(Year)+0.01)
) +
geom_line(position=dodge, aes(group=Places, y=Reference.Value,x=Year),   color="black")
# geom_step(position=dodge, direction="vh", aes(group=Places,y=Reference.Value,x=Year), color="black")

      

+3


source to share


2 answers


Here's my interpretation. You can get the "dodge" offsets and use them to start / end your line segments. group

there will be in all geoms Year

, and the deviations determined by dodge simply say how far the grouping of factors should be Place

.

## Get offsets for dodge
dodgeWidth <- 0.9
nFactors <- length(levels(chunk[,Places]))
chunk[, `:=` (dPlaces = (dodgeWidth/nFactors)*(as.numeric(Places) - mean(as.numeric(Places))))]

limits <- aes(ymax = Value+CI, ymin=Value-CI)
dodge <- position_dodge(width=0.9)
p <- ggplot(chunk, aes(colour=Places, fill=Places, y=Value, x=Year))

p + geom_linerange(limits, position=dodge) +
  geom_point(position=dodge, size = 5) +
  geom_segment(position=dodge, aes(y=Expected.Value, yend=Expected.Value, 
                   x=as.numeric(Year)+dPlaces-0.1, xend=as.numeric(Year)+dPlaces+0.1)) +
  geom_step(aes(group=Year, y=Reference.Value, 
                x=as.numeric(Year)+dPlaces), color="black", linetype=2)

      



enter image description here

+2


source


You can use geom_errorbar

with the stat = "hline"

same as in this answer to get the horizontal lines sloping as you want. You would use geom_errorbar

twice, once for adding lines Expected.Value

and once for lines Reference.Value

.

ggplot(chunk, aes(colour=Places, fill=Places, y=Value, x=Year)) +
    geom_linerange(limits, position=dodge) +
    geom_point(position=dodge, size = 5) +
    geom_errorbar(stat = "hline", aes(yintercept = Expected.Value, ymax = ..y.., ymin = ..y..), 
                position = dodge, width = .8)  +
    geom_errorbar(stat = "hline", aes(group = Year, yintercept = Reference.Value, ymax = ..y.., ymin = ..y..), 
                position = dodge, color="black", width = .8, linetype = 2)

      

enter image description here



Edit

The approach stat = "hline"

no longer works in the R development version behind this github issue . However, it geom_errorbar

can be used directly to achieve the same result.

ggplot(chunk, aes(colour=Places, fill=Places, y=Value, x=Year)) +
    geom_linerange(limits, position=dodge) +
    geom_point(position=dodge, size = 5) +
    geom_errorbar(aes(y = Expected.Value, ymax = ..y.., ymin = ..y..), 
                position = dodge, width = .8)  +
    geom_errorbar(aes(group = Year, y = Reference.Value, ymax = ..y.., ymin = ..y..), 
                position = dodge, color="black", width = .8, linetype = 2)

      

+1


source







All Articles