web-dev-qa-db-ja.com

Rプロット-グループ化された線をプロット

Ggplot2が提供するインタラクティブ機能を利用するために、ggplot2からplotlyに移行しています。

Plotlyライブラリにネイティブのggplotコマンドをカプセル化するために使用できるggplotly関数があることは知っていますが、ネイティブの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のようにするにはどうすればよいですか?

8
kraussian

奇妙なことに、plotlydplyrgroup_byを実行する順序が重要です(私が思うべきではありません)。おそらくこれはバグであり、おそらく私が知らない何らかの機能です。

この時点で、plotlyは若く、このような予期しない「バグ」でいっぱいです。したがって、plotlyggplot2の完全な代替になると期待することには十分注意してください。確かにいくつかのクールな機能がありますが、現時点では閉じています。

だからこれはあなたが望むものを手に入れます:

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

降伏: enter image description here

あなたが試したことがあなたに空白を与えるところ:

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

いくつかの奇妙な理由で行を孤立させます:

enter image description here

そして、これが参考のためにあなたの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()

enter image description here

5
Mike Wise