8
votes

geom_density_ridges nécessite l'esthétique manquante suivante: y

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.


3 commentaires

Pouvez-vous publier vos données dans un format copier-coller (par exemple, en utilisant dput ou dump )?


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.


5 Réponses :


4
votes

Comme @JonnyPhelps l'a commenté, mes données ne sont pas compatibles avec un tracé de ligne de crête (ou vice versa).


0 commentaires

7
votes

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()


0 commentaires

2
votes

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()


0 commentaires

4
votes

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.)


0 commentaires

0
votes

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 =


0 commentaires