Je veux créer un histogramme à partir d'un bloc de données, mais chaque fois que du code est utilisé, j'obtiens une erreur 'x' must be numeric
.
df <- data.frame(col1 = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120),
col2 = c(10, 21, 31, 41, 51, 61, 72, 82, 92, 104, 114, 134))
hist(df)
tu peux faire
hist(df$col1)
ou
with(df, hist(col2))
Si vous voulez que toutes les colonnes chacune dans leurs propres histogrammes, vous pourriez peut-être faire quelque chose comme
par(mfrow=c(2,1))
histout=apply(df,2,hist)
Veuillez considérer d'autres visualisations pour votre exemple, car un histogramme peut ne pas être le meilleur pour comparer les données très similaires dans col1 et col2. Dans votre cas, il serait utile de transformer d'abord votre df en un format bien rangé
library(ggplot2)
library(tidyr)
df_tidy <- gather(df, cols, value)
puis utilisez l'un des graphiques suivants qui mettent en évidence les petites différences dans les données:
comme graphique de densité:
ggplot(df_tidy, aes(x = value)) +
geom_density(aes(color=cols))
ou nuage de points:
ggplot(df_tidy, aes(x = value, y=cols)) +
geom_point(aes(color=cols), size=3) +
scale_x_continuous(breaks = c(0,25,50,75,100,125))
ou boxplot:
ggplot(df_tidy, aes(x = cols, y=value)) +
geom_boxplot(aes(fill=cols))
Si vous voulez un histogramme de toutes les données, vous pouvez utiliser
hist(c(df$col1,df$col2))
Je recommande d'utiliser la bibliothèque ggplot voici un exemple
generateHistogram <- function(columnName) {
#I used library(ggplot2)
houseDFPlot <- ggplot(data=DF, aes(x=DF[columnName]))
#layering
houseDFPlot + geom_histogram()
}