martinkabe
martinkabe

Reputation: 1139

Ordering in r plotly barchart

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

Answers (3)

Joost
Joost

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

mtoto
mtoto

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)

enter image description here

Upvotes: 51

Marta
Marta

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

Related Questions