Как расположить ось x на линейчатой диаграмме с помощью R

#r #ggplot2 #dplyr #plotly #bar-chart

#r #ggplot2 #dplyr #plotly #гистограмма

Вопрос:

Пожалуйста, укажите, как можно упорядочить порядок расположения оси x на линейчатой диаграмме Plotly.

Я использую игрушечный пример с набором данных diamond и пытаюсь упорядочить четкость по возрастанию средней глубины. Я очень хорошо знаком с ggplot, но совершенно новичок в plotly. Я видел несколько сообщений в Интернете по этому вопросу, но ни одно из них не кажется окончательным. После рендеринга графика я думаю, что категории четкости действительно упорядочены правильно, наведение курсора мыши для получения значений меток предполагает это, но эти значения (61.3, 61.3, 61.4, 61.6, 61.7,61.7,61.8, 61.9 для всех групп ясности) явно не сопоставляются с осью yкоторая находится в масштабе от 0 до 16 кб. Это меня смущает. Я не собираюсь использовать оболочку ggplotly, я ищу плотное решение, спасибо.

Плоттерная гистограмма с проблемным порядком по оси x и сомнительным масштабом по оси Y

 library(tidyverse)
library(plotly)

set.seed(321)
my_diamonds <- ggplot2::diamonds %>%
  slice(sample(nrow(.), 1000))

my_diamonds %>%
  group_by(clarity) %>%
  mutate(mean_depth = mean(depth)) %>%
  ungroup() %>%
  plot_ly(
    data = .
    , x = ~ clarity
    , y = ~ mean_depth
  ) %>%
  layout(
    title = "Mean Depth for each Clarity Category"
    , xaxis = list(categoryorder = "array", categoryarray = ~ reorder(clarity, mean_depth))
  )
 

Ответ №1:

Данные не были полностью обработаны до построения графика. Как только вы выберете соответствующую информацию, ваш код будет работать нормально. Я вычел 61 из mean_depth этого, так как так будет легче увидеть порядок баров. Вы можете убрать вычитание. Попробуй это

 set.seed(321)
my_diamonds <- ggplot2::diamonds %>%
  slice(sample(nrow(.), 1000))

my_diamonds %>%
  group_by(clarity) %>%
  mutate(mean_depth = mean(depth)-61) %>% 
  distinct(clarity,mean_depth) %>%  arrange(mean_depth) %>% 
  ungroup() %>%

  plot_ly(
    data = .
    , x = ~ clarity
    , y = ~ mean_depth
  ) %>%
  layout(
    title = "Mean Depth for each Clarity Category"
    , xaxis = list(categoryorder = "array", categoryarray = ~ reorder(clarity, mean_depth))
  )
 

вывод

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

1. Большое спасибо. Для получения информации для других.. Я также получил ее по убыванию с помощью arrange(desc(mean_depth)) . Я думал, что эта функциональность будет находиться на шаге categoryarray = reorder, но она работала в основной цепочке dplyr.