'R plotly - Plotting grouped lines
I am migrating over from ggplot2 to plotly, in order to take advantage of the interactive features they offer.
I do realize that the plotly library has a ggplotly function I can use to encapsulate native ggplot commands, but I wanted to learn how to plot similar graphs using native plotly commands.
My problem is that I can't seem to make plotly draw grouped lines the way ggplot2 does.
Base Data, using the default mpg data set from ggplot2
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|
Example 1: This works
mpg %>%
group_by(manufacturer, class) %>%
summarise(models=n()) %>%
plot_ly(x=~class, y=~models, type="scatter", mode="lines+marker", color=~manufacturer)
Example 2: But this returns only a blank plot
Difference with Example 1 is that I'm trying to group by class instead of manufacturer.
mpg %>%
group_by(manufacturer, class) %>%
summarise(models=n()) %>%
plot_ly(x=~manufacturer, y=~models, type="scatter", mode="lines+marker", color=~class)
Example 3: This is the ggplot2 version of how I would like it plotted
mpg %>%
group_by(manufacturer, class) %>%
summarise(models=n()) %>%
ggplot(aes(x=manufacturer, y=models, group=class, color=class)) +
geom_line() +
theme_minimal()
How could I make Example 2 look like Example 3?
Solution 1:[1]
Oddly enough in plotly
the order that you do the dplyr
group_by
matters (it should not I would think). Perhaps this is a bug, perhaps some kind of feature in some way I don't know about.
At this point plotly
is young, and full of unexpected "bugs" like this, so be very cautious about expecting plotly
to be a complete replacement for ggplot2
, it is not even close at the moment, although it has some cool features for sure.
So this gets you what you want:
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")
Where as what you tried gets you a blank :
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")
orphans the lines for some odd reason:
And here is your ggplot version for reference:
mpg %>%
group_by(manufacturer, class) %>%
summarise(models=n()) %>%
ggplot(aes(x=manufacturer, y=models, group=class, color=class)) +
geom_line() + geom_point() +
theme_minimal()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |