I would like to produce histograms with density lines for all my numeric columns, and facet them by another column.
Using the iris data set as an example, I would like to produce histograms for Sepal.Length etc, with facets for each of Species.
This is what I have tried:
for (i in colnames(subset(iris, select = -`Species`))) {
plot= ggplot(iris, aes(x= i))
geom_histogram()
geom_density(colour = "blue", size = 1)
facet_wrap(~ Species, scales = "free")
print(plot)
}
also tried
for (i in colnames(subset(iris, select = -`Species`))) {
plot= ggplot(subset(iris, select = -`Species`), aes(x= i))
geom_histogram()
geom_density(colour = "blue", size = 1)
facet_wrap(~ iris$Species, scales = "free")
print(plot)
}
The error I get is Error in f(): ! StatBin requires a continuous x variable: the x variable is discrete.Perhaps you want stat="count"?
Do I need to put something in the geom_histogram() command?
CodePudding user response:
Are you looking for something like this?
- We bring the data in long format, with
pivot_longer. Then applyfill= nameand facet_wrap like you did:
library(tidyverse)
iris %>%
pivot_longer(-Species) %>%
ggplot(aes(x = value, fill=name))
geom_histogram()
geom_density(colour = "blue", size = 1)
facet_wrap(~ Species, scales = "free")
CodePudding user response:
I found a helpful answer to this question.
I needed to use aes_string.
This is what got the desired effect for my original question:
for (i in colnames(subset(iris, select = -`Species`))) {
plot= ggplot(subset(iris, select = -`Species`), aes_string(x= i))
geom_histogram(aes(y = ..density..))
geom_density(colour = "blue", size = 1)
facet_wrap(~ iris$Species, scales = "free")
print(plot)
}
producing separate plots for each variable.

