Упорядочивание в столбчатой диаграмме r plotly

#r #plotly

#r #графически

Вопрос:

Почему я получаю другой порядок в столбчатой диаграмме plotly, чем я определил в переменных x и y.

Например.

 library(plotly)

plot_ly(
  x = c("giraffes", "orangutans", "monkeys"),
  y = c(20, 14, 23),
  name = "SF Zoo",
  type = "bar"
)
  

Мне нужна столбчатая диаграмма, где я вижу столбцы в том же порядке, в котором определена переменная x (категориальная). Есть ли какой-нибудь трюк для этого?

Ответ №1:

Plotly упорядочит ваши оси в порядке, который присутствует в предоставленных данных. В случае character векторов в алфавитном порядке; в случае факторов в порядке уровней. Чтобы переопределить это поведение, вам необходимо определить categoryorder и categoryarray для xaxis внутренней 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)
  

введите описание изображения здесь

Комментарии:

1. Этот ответ более гибкий, чем упорядочение на основе факторов 🙂

2. спас мой день! Более гибкий, чем факторы, это точно!

Ответ №2:

plotly выполняет это в алфавитном порядке. Если вы хотите изменить это, просто попробуйте изменить уровни коэффициента. Это было бы возможно, если бы вы предоставили свои данные в форме data.frame , как здесь:

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

Комментарии:

1. Если у вас есть больший набор данных, который уже находится в нужном порядке, вы можете использовать table$x <- factor(table$x, levels = c(as.character(table$x))) нет необходимости вводить каждое слово.

Ответ №3:

Вы также можете использовать reorder , если хотите упорядочить на основе второй переменной:

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