1

I'm trying to plot continuous y-axis values of a categorical x-axis variable (and then flip them) in ggplot2, but my y-axis values are not showing.

This is my data set:

                              AIC.means   AIC.lci   AIC.uci
Sparse Dual Stream            -4632.137 -4655.353 -4608.922
Heterogeneous Dual Stream A   -4627.653 -4650.866 -4604.439
Heterogeneous Dual Stream B   -4622.063 -4645.194 -4598.932
Dense Dual Stream             -4616.507 -4639.633 -4593.381
Radical Storage               -4615.934 -4639.052 -4592.817
Radical Sparse Comp.          -4601.292 -4624.428 -4578.156
Radical Heterogeneous Comp. B -4600.650 -4623.785 -4577.515
Radical Dense Comp.           -4589.490 -4612.632 -4566.348
Radical Heterogeneous Comp. A -4587.993 -4611.141 -4564.845

This is the code for the plot and the plot I produced.

ggplot(AIC.plotdata, aes(x=row.names(AIC.plotdata), y=AIC.means)) +
  geom_bar(aes(), stat="identity") +
  scale_y_continuous(limits = c(-4700, -4500)) +
  coord_flip()

enter image description here

I set the y-axis limits below the min and above the max, as shown below. So the absence of y-axis labels cannot be due to them falling out of axis range.

summary(AIC.plotdata$AIC.means)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  -4632   -4622   -4616   -4610   -4601   -4588 

This is what I'm trying to get in ggplot2, but obtained using lattice (the AIC values appear in sorted order which I yet need to figure out for the ggplot).

enter image description here

I'd appreciate all your help!

Des Grieux
  • 520
  • 1
  • 5
  • 31
  • geom_bar wants a zero value in your limits range to anchor it's bottom – Nate Apr 19 '17 at 19:37
  • Thanks! Is there a way to work around this constraint, given that the interesting differences for the data are between -4700 and -4500? The values represent model penalties, so the lower the penalty the better the model, so it doesn't make sense to flip the sign. – Des Grieux Apr 19 '17 at 19:38
  • Try it without the `aes()` in the `geom_bar` term - this might be telling ggplot that there are no aesthetics, hence the blank chart. – Andrew Gustar Apr 19 '17 at 19:41
  • I tried that, but the result is the same, presumably due to the constraint that @NateDay mentioned. – Des Grieux Apr 19 '17 at 19:42
  • Does this answer your question? [geom\_bar bars not displaying when specifying ylim](https://stackoverflow.com/questions/10365167/geom-bar-bars-not-displaying-when-specifying-ylim) – tjebo Nov 10 '21 at 07:39

1 Answers1

1

How about using geom_segement and shifting your data in the ggplot call? See this question for something similar ggplot2: Setting geom_bar baseline to 1 instead of zero:

ggplot(df) +
  geom_segment(aes(x=rownames, xend=rownames, y=-4700, yend=AIC.means), size = 10) + 
  scale_y_continuous(limits = c(-4700, -4500)) +
  coord_flip()

enter image description here

Data:

df <- structure(list(rownames = c("Sparse Dual Stream", "Heterogeneous Dual Stream A", 
"Heterogeneous Dual Stream B", "Dense Dual Stream", "Radical Storage", 
"Radical Sparse Comp.", "Radical Heterogeneous Comp. B", "Radical Dense Comp.", 
"Radical Heterogeneous Comp. A"), AIC.means = c(-4632.137, -4627.653, 
-4622.063, -4616.507, -4615.934, -4601.292, -4600.65, -4589.49, 
-4587.993), AIC.lci = c(-4655.353, -4650.866, -4645.194, -4639.633, 
-4639.052, -4624.428, -4623.785, -4612.632, -4611.141), AIC.uci = c(-4608.922, 
-4604.439, -4598.932, -4593.381, -4592.817, -4578.156, -4577.515, 
-4566.348, -4564.845)), .Names = c("rownames", "AIC.means", "AIC.lci", 
"AIC.uci"), row.names = c(NA, -9L), class = "data.frame")
Community
  • 1
  • 1
Mike H.
  • 13,960
  • 2
  • 29
  • 39