Quoi que j'essaye, je ne peux pas créer un tracé de ligne de crête en utilisant ggridges
. Utilisation d'un dataframe graphing_dataframe
qui se présente comme suit:
ggplot(graphing_dataframe, aes(x = rating, y = week, fill = ..x..) ) + geom_density_ridges() Picking joint bandwidth of 2.53 Error: geom_density_ridges requires the following missing aesthetics: y
Mes données sont:
structure(list(id = c("00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343", "00343"), week = c(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), rating = c(14, 4, 12, 8, 14, 19, 16, 16, 7, 8, 9, 18, 9, 6)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), spec = structure(list(cols = list(id = structure(list(), class = c("collector_character", "collector")), week = structure(list(), class = c("collector_double", "collector")), rating = structure(list(), class = c("collector_double", "collector"))), default = structure(list(), class = c("collector_guess", "collector"))), class = "col_spec"))
Mon code est:
str(graphing_dataframe) summary(graphing_dataframe) > str(graphing_dataframe) Classes âtbl_dfâ, âtblâ and 'data.frame': 14 obs. of 3 variables: $ id : chr "00343" "00343" "00343" "00343" ... $ week : num 14 1 2 3 4 5 6 7 8 9 ... $ rating: num 14 4 12 8 14 19 16 16 7 8 ... - attr(*, "spec")= .. cols( .. id = col_character(), .. week = col_double(), .. rating = col_double() .. ) > summary(graphing_dataframe) id week rating Length:14 Min. : 1.00 Min. : 4.00 Class :character 1st Qu.: 4.25 1st Qu.: 8.00 Mode :character Median : 7.50 Median :10.50 Mean : 7.50 Mean :11.43 3rd Qu.:10.75 3rd Qu.:15.50 Max. :14.00 Max. :19.00
J'ai essayé d'utiliser unlist
par cette question mais cela ne fonctionne pas non plus.
5 Réponses :
Comme @JonnyPhelps l'a commenté, mes données ne sont pas compatibles avec un tracé de ligne de crête (ou vice versa).
Cette question semble être en haut de la liste lors de la recherche de ce message d'erreur sur Google, alors j'ai pensé que je la répondrais: l'autre raison pour laquelle vous pouvez obtenir cette erreur est si vous avez votre x
et y
commuté:
Par exemple, avec les données ci-dessus (en utilisant plutôt id
), cela fonctionne:
ggplot(graphing_dataframe, aes(x = id, y=rating)) + geom_density_ridges()
Pendant que cela génère l'erreur:
ggplot(graphing_dataframe, aes(x = rating, y = id)) + geom_density_ridges()
J'ai également remarqué que si y est un facteur, cette erreur n'apparaîtra pas. essayez ceci :)
ggplot(graphing_dataframe, aes(x = id, y=as.factor(rating))) + geom_density_ridges()
Il semble que le message d'erreur soit un peu trompeur, selon le documentation vous devez ajouter une esthétique de groupe pour les variables numériques:
L'esthétique du regroupement n'a pas besoin d'être fournie si une variable catégorielle est mappée sur l'axe y, mais elle doit être fournie si la variable est numérique.
donc ajouter group = week
à ggplot (aes (…))
devrait faire l'affaire. (J'ai juste eu le même problème moi-même.)
J'ai eu du succès avec l'un ou l'autre de ces deux modèles inspirés de la discussion ci-dessus et de la documentation: ggplot (CSVdotcsv, aes (x = TSH, y = as.factor (t))) + #as factor fournit la légende pour l'heure ggplot (CSVdotcsv, aes (x = TSH, y = t, group = t)) + # important pour ajouter un groupe =
Pouvez-vous publier vos données dans un format copier-coller (par exemple, en utilisant
dput
oudump
)?Merci @Lyngbakr je n'avais pas entendu parler de dput
Êtes-vous sûr de vouloir des crêtes de densité? Habituellement, ces fonctions sont utilisées si vous avez une variable de regroupement et une densité. Voulez-vous juste un graphique linéaire de (semaine, note)? Je ne peux pas visualiser une autre sortie appropriée avec ces données, sauf si les données d'origine sont beaucoup plus grandes.