【问题标题】:Using factors in ggplot and plotly在 ggplot 和 plotly 中使用因子
【发布时间】:2021-01-20 16:03:40
【问题描述】:

我正在尝试用一些数据制作一个 ggplot,用一个因子变量填充点。我会在这里写一个小例子来解释自己。


drap = tibble(id = c("S1", "S2", "S3" , "S4", "S5", "S6", "S7", "S8"), 
              ret =c (123, 555, 763, 113, 415, 121, 221, 531),
              cod = c(1, 5, 1, 3, 5, 1, 5, 8))

#here the "cod" column is converted to a factor with 9 levels (0 to 8).
drap$cod = factor(drap$cod, levels = c(0:8), ordered = TRUE)


plot = ggplot(drap) + geom_count(mapping=aes(x= id, y=ret, fill = cod))
ggplotly(plot)

factor() 函数运行良好(我可以看到所有级别),但问题出在后面。 当我制作情节时,图例只有数据库中显示的值(所以 1、3、5、8)。我想展示一个具有所有因子水平 (0:8) 的图例。我发现使用函数 levels() 可以保存因子级别,但我不知道下一步该做什么。

当然这是一个小例子,一切都应该在闪亮的情况下工作。

编辑: 对于那些对这个问题感兴趣的人,我找到了ggplot 的解决方案,但如果你想使用ggplotly(),它就行不通了。只要您具有与输入相同的数据,@duck 解决方案就可以正常工作。如果您想更改例如变量,它不再起作用(至少没有很多 if 条件)。所以“反应式”解决方案是在ggplot 中使用DROP=FALSE。不幸的是,目前plotly 不支持此功能。

【问题讨论】:

    标签: r ggplot2 shiny


    【解决方案1】:

    试试这个:

    library(ggplot2)
    #Code
    ggplot(drap) + geom_count(mapping=aes(x= id, y=ret, fill = cod))+
      scale_fill_discrete(limits=factor(c(0:8)))
    

    输出:

    【讨论】:

    • 谢谢它有效。但现在我有另一个问题。该解决方案适用于该数据,但在我的应用程序中 x 和 y 不是固定的,我更改了它们。因此,例如,如果我想显示一个连续数据而不是那个因子数据(或者只是另一个具有不同级别的因子数据),它就不起作用。所以 ggplot 应该直接从“drap”中获取级别。问题仅在于 ggplot,因为使用 tmap() 可以正确显示图例(它直接从数据中获取级别,而无需手动指定它们)。有什么想法吗?
    • 我发现这可以在 ggplot 中使用 DROP=FALSE 完成并且它可以工作,但是后来 plotly 不支持这个功能所以现在我的问题没有解决方案。不过谢谢。
    • @FabioDR 我明白了。如果您认为这个答案在任何意义上都有帮助,请考虑接受/支持它。亲切的问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2020-12-01
    • 2015-10-26
    相关资源
    最近更新 更多