Hi I want to create a similar chart as shown below with R script:
taken from: https://community.tableau.com/thread/194440
this is my code in R :
library(ggplot2)
ifile <- read.table("C:/ifiles/test.txt", skip = 2, header = TRUE, sep="\t")
ifileVI <- data.frame(ifile["VI"], ifile["Site"])
x<-quantile(ifileVI$VI,c(0.01,0.99))
data_clean <- ifileVI[bfileVI$VI >=x[1] & ifileVI$VI <=x[2],]
p <- ggplot(data_clean, aes(x = Site, y = VI, group=Site)) + geom_boxplot() + geom_histogram(binwidth = 0.05)
p
however im getting the following error:
Error: stat_bin() must not be used with a y aesthetic.
bfileVI:
Id VI Site
WFR1 2.91 1
WFR1 2.89 2
WFR1 2.86 3
WFR1 2.91 4
WFR1 2.87 1
WFR1 2.67 2
WFR1 2.76 3
WFR1 2.74 4
WFR1 2.98 4
WFR1 2.89 3
WFR1 2.55 4
WFR1 2.96 3
WFR1 2.71 1
WFR1 2.98 2
WFR1 2.89 3
WFR2 2.55 2
WFR2 2.86 4
WFR2 2.91 3
WFR2 287 1
WFR2 2.74 2
WFR2 2.98 1
WFR2 2.89 2
WFR2 2.55 3
WFR2 2.96 4
WFR2 2.71 1
WFR2 2.86 2
WFR2 2.91 3
WFR2 287 4
WFR2 2.67 1
WFR2 2.76 2
WFR2 2.74 3
WFR2 2.98 4
WFR2 2.89 1
WFR2 2.55 2
WFR2 2.96 3
WFR2 2.71 4
WFR2 2.98 1
WFR2 2.89 2
WFR2 2.55 3
WFR2 2.86 4
You're getting
Error: stat_bin() must not be used with a y aesthetic.
because you can't specifyy
in the aesthetic of a histogram. If you want to mix plots that have different parameters, you need to supply distinct aesthetics. I'll demonstrate withiris
like so:Unfortunately, the default for boxplots is vertical, for histograms is horizontal, and
coord_flip()
is all-or-nothing, so you're left with this awful thing:Best I can figure out is instead of having them overlap, put one on top of the other with the
gridExtra
package:which gives us something pretty good:
You can try to replace histogram with rectangles to generate a plot like this:
How to do this:
Generate random data
Replace histogram with rectangles
Add boxplot
To add boxplot we need to:
coord_flip
)geom_rect
Code:
Result:
Final plot code with nicer visuals
A good example where
ggstance
package comes in handy.