【问题标题】:geom_density_ridges requires the following missing aesthetics: ygeom_density_ridges 需要以下缺失的美学:y
【发布时间】:2019-06-06 10:04:55
【问题描述】:

无论我尝试什么,我都无法使用ggridges 创建山脊线图。使用如下所示的数据框graphing_dataframe

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 

我的数据是:

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

我的代码是:

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

我已尝试使用 unlistthis question,但这也不起作用。

【问题讨论】:

  • 您能否以复制粘贴格式发布您的数据(例如,使用dputdump)?
  • 您确定要使用密度脊吗?如果您有分组变量和密度,通常会使用这些函数。你只想要(周,评级)的线图吗?除非原始数据大得多,否则我无法用这些数据可视化另一个合适的输出。

标签: r ggplot2 ggridges ridgeline-plot


【解决方案1】:

好像错误信息有点误导,根据documentation你需要为数值变量添加组审美:

如果分类变量映射到 y 轴,则不需要提供分组美学,但如果变量是数值,则需要提供。

所以将group = week 添加到ggplot(aes(…)) 应该可以解决问题。 (我自己也遇到了同样的问题。)

【讨论】:

    【解决方案2】:

    在谷歌搜索此错误消息时,此问题似乎排在列表的顶部,所以我想我会插话:您可能会收到此错误的另一个原因是,如果您切换了 xy

    例如,使用上述数据(使用 id 代替),这样可以:

    ggplot(graphing_dataframe, 
            aes(x = rating, y = id)) +
      geom_density_ridges()
    

    虽然这会引发错误:

    ggplot(graphing_dataframe, 
            aes(x = id, y=rating)) +
      geom_density_ridges()
    

    【讨论】:

      【解决方案3】:

      我还注意到,如果 y 是一个因素,则不会弹出此错误。 试试这个:)

      ggplot(graphing_dataframe, 
              aes(x = id, y=as.factor(rating))) +
        geom_density_ridges()
      

      【讨论】:

        【解决方案4】:

        正如@JonnyPhelps 所说,我的数据与山脊线图不兼容(反之亦然)。

        【讨论】:

          【解决方案5】:

          受上述讨论和文档的启发,我在这两个模型中的任何一个上都取得了成功: ggplot(CSVdotcsv, aes(x = TSH, y = as.factor(t))) + #as 因子提供小时的图例 ggplot(CSVdotcsv, aes(x = TSH, y = t, group = t)) + # 重要添加组 =

          【讨论】:

            【解决方案6】:

            y 需要是一个分类变量。你可以试试:

            ggplot(graphing_dataframe, 
               aes(x = rating, y = as.factor(week), fill = ..x..))+
            geom_density_ridges()
            

            ggplot(graphing_dataframe, 
               aes(x = rating, y = as.character(week), fill = ..x..))+
            geom_density_ridges()
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-12-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-16
              • 2019-07-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多