Reputation: 1139
Why do I get the different order in plotly bar chart than I defined in x and y variables.
E.g.
library(plotly)
plot_ly(
x = c("giraffes", "orangutans", "monkeys"),
y = c(20, 14, 23),
name = "SF Zoo",
type = "bar"
)
I need bar chart where I see bars in the same order as x variable (categorical) is defined. Is there any trick for that?
Upvotes: 34
Views: 46691
Reputation: 163
You can also use reorder
if you want to order based on a second variable:
library(plotly)
x <- c("giraffes", "orangutans", "monkeys")
y <- c(20, 14, 23)
plot_ly(
x = ~reorder(x,y),
y = ~y,
name = "SF Zoo",
type = "bar"
)
Upvotes: 15
Reputation: 24188
Plotly
will order your axes by the order that is present in the data supplied. In case of character
vectors alphabetically; in case of factors by the order of levels. To override this behaviour, you need to define categoryorder
and categoryarray
for the xaxis
inside layout
:
library(plotly)
xform <- list(categoryorder = "array",
categoryarray = c("giraffes",
"orangutans",
"monkeys"))
plot_ly(
x = c("giraffes", "orangutans", "monkeys"),
y = c(20, 14, 23),
name = "SF Zoo",
type = "bar") %>%
layout(xaxis = xform)
Upvotes: 51
Reputation: 3162
plotly
does it in alphabetical order. If you want to change it, just try to change levels of factor. This would be possible if you give your data in the form of data.frame
like here:
library(plotly)
table <- data.frame(x = c("giraffes", "orangutans", "monkeys"),
y = c(20, 14, 23))
table$x <- factor(table$x, levels = c("giraffes", "orangutans", "monkeys"))
plot_ly(
data=table,
x = ~x,
y = ~y,
name = "SF Zoo",
type = "bar"
)
Upvotes: 36