【问题标题】:R plotly - Plotting grouped linesR plotly - 绘制分组线
【发布时间】:2017-09-24 17:10:33
【问题描述】:

我正在从 ggplot2 迁移到 plotly,以便利用它们提供的交互功能。

我确实意识到 plotly 库有一个 ggplotly 函数,我可以使用它来封装原生 ggplot 命令,但我想学习如何使用原生 plotly 命令绘制类似的图形。

我的问题是我似乎无法像 ggplot2 那样绘制分组线。

基础数据,使用来自ggplot2的默认mpg数据集

mpg %>%
  group_by(manufacturer, class) %>%
  summarise(models=n())

|manufacturer |class      | models|
|:------------|:----------|------:|
|audi         |compact    |     15|
|audi         |midsize    |      3|
|chevrolet    |2seater    |      5|
|chevrolet    |midsize    |      5|
|chevrolet    |suv        |      9|
|dodge        |minivan    |     11|
|dodge        |pickup     |     19|
|dodge        |suv        |      7|
|ford         |pickup     |      7|
|ford         |subcompact |      9|
|ford         |suv        |      9|
|honda        |subcompact |      9|
|hyundai      |midsize    |      7|
|hyundai      |subcompact |      7|
|jeep         |suv        |      8|
|land rover   |suv        |      4|
|lincoln      |suv        |      3|
|mercury      |suv        |      4|
|nissan       |compact    |      2|
|nissan       |midsize    |      7|
|nissan       |suv        |      4|
|pontiac      |midsize    |      5|
|subaru       |compact    |      4|
|subaru       |subcompact |      4|
|subaru       |suv        |      6|
|toyota       |compact    |     12|
|toyota       |midsize    |      7|
|toyota       |pickup     |      7|
|toyota       |suv        |      8|
|volkswagen   |compact    |     14|
|volkswagen   |midsize    |      7|
|volkswagen   |subcompact |      6|

示例 1:可行

mpg %>%
  group_by(manufacturer, class) %>%
  summarise(models=n()) %>%
  plot_ly(x=~class, y=~models, type="scatter", mode="lines+marker", color=~manufacturer)

示例 2:但这只会返回一个空白图

与示例 1 的不同之处在于我尝试按类而不是制造商进行分组。

mpg %>%
  group_by(manufacturer, class) %>%
  summarise(models=n()) %>%
  plot_ly(x=~manufacturer, y=~models, type="scatter", mode="lines+marker", color=~class)

示例 3:这是我希望绘制的 ggplot2 版本

mpg %>%
  group_by(manufacturer, class) %>%
  summarise(models=n()) %>%
  ggplot(aes(x=manufacturer, y=models, group=class, color=class)) +
    geom_line() +
    theme_minimal()

如何让示例 2 看起来像示例 3?

【问题讨论】:

  • @MikeWise 嗯,我尝试使用 mutate() 将列名更改为“klass”,但它仍然给我一个空图。至于总和,我意识到我并没有具体了解基础数据集。 “模型”列已经是一个汇总值,我已经编辑了我的帖子以反映这一点。不过,感谢您指出这一点。
  • 是的,我在深入研究后收回了该评论。你看我的新答案了吗?
  • 通知似乎已损坏。我没有收到您的评论通知。

标签: r plot ggplot2 plotly


【解决方案1】:

奇怪的是,plotly 执行 dplyr group_by 的顺序很重要(我不应该这么想)。也许这是一个错误,也许是某种我不知道的某种功能。

此时plotly 还很年轻,而且充满了这种意想不到的“bug”,所以要非常谨慎地期待plotly 完全替代ggplot2,目前甚至还没有接近,虽然它肯定有一些很酷的功能。

所以这会得到你想要的:

library(dplyr)
library(plotly) 
mpg %>%
  group_by(class,manufacturer) %>%
  summarise(models=n()) %>%
  plot_ly(x=~manufacturer, y=~models, group=~class,
                           type="scatter",color=~class, mode="lines+markers")

产量:

你的尝试让你一片空白:

library(dplyr)
library(plotly) 
mpg %>%
  group_by(manufacturer,class) %>%
  summarise(models=n()) %>%
  plot_ly(x=~manufacturer, y=~models, group=~class,
                           type="scatter",color=~class, mode="lines+markers")

出于某种奇怪的原因孤立了这些行:

这是你的 ggplot 版本供参考:

mpg %>%
  group_by(manufacturer, class) %>%
  summarise(models=n()) %>%
  ggplot(aes(x=manufacturer, y=models, group=class, color=class)) +
  geom_line() + geom_point() +
  theme_minimal()

【讨论】:

  • 谢谢!尽管我同意这是一个非常奇怪的未记录错误/功能。我没有意识到 plotly 还很年轻;也许我应该考虑使用 ggplotly 来封装 ggplot。
  • 哦,等等,我正在使用最新的 plotly 版本 4.5.6,它告诉我“组参数已被弃用。使用 group_by() 或拆分。”。但是当我用 split=~class 替换 group=~class 时,会显示点而不是线。
  • 就像我说的,越野车。但他们正在为此努力。查看 github 问题列表以查看活动。
  • 使用group 运行解决方案会产生警告。 group 已被弃用。 color 现在负责分组。
  • 在我的工作和提供的示例中仍然存在连接点的问题。得到相同的未连接点结果... color/group_by 没有帮助。
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多