Почему ggplot2 geom_boxplot без причины выдает неверные результаты заказа?

Я использовал ggplot2 с geom_boxplot для построения нескольких диаграмм на одном графике. Данные выглядят примерно так, как показано ниже.

Month   Rainfall

1         45
1         12
1         14
2         65
2         45
2         78
3         10
3         35
3         92
.         .
.         .
.         .

Итак, используя boxplot, я хочу увидеть boxplot для значений Rainfall для каждой группы (1,2,3...). Результат, который я получаю, странный, и порядок кажется перепутанным. Любая помощь?

ggplot(data=edit3)+geom_boxplot(aes(x=Month, y=Rainfall))

Примечание. edit3 — это фрейм данных со значениями Rainfall и Month.

Почему ggplot2 geom_boxplot без причины выдает неверные результаты заказа?

dput(head(edit3[,c("Month","Rainfall")],9))
structure(list(Month = c("1", "1", "1", "1", "1", "1", "1", "1", 
"2"), Rainfall = c(NA, 135.6, 34.2, 39.4, 134.6, 234.6, 69.6, 
92.8, NA)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))

Месяцы упорядочены лексикографически, скорее всего, потому, что этот столбец является символом или фактором. Преобразуйте его в числовой столбец.

joran 30.05.2019 22:32

Не уверен, какой будет лучший дубликат, возможно, это или, возможно, это.

joran 30.05.2019 22:39

Я только что попробовал это, используя edit3$Month <- as.integer(edit3$Month), и в результате получилась только одна диаграмма общих значений Rainfall. Любое предложение?

akis 30.05.2019 22:39

Спасибо, проверю оба. Не удалось найти дубликат.

akis 30.05.2019 22:40

Не без реального воспроизводимого примера для работы. Но я могу сказать вам со 100% уверенностью, что порядок, который вы видите, связан с тем, что этот столбец изначально был либо символом, либо фактором. Если бы это был фактор, то as.integer не обязательно преобразовал бы его так, как вы хотите. См. мою вторую ссылку.

joran 30.05.2019 22:40

Следуя последнему комментарию Джорана, если ваша переменная является фактором, вам необходимо преобразовать ее в текст, прежде чем преобразовывать в числовой. Попробуйте edit3$Month = as.integer(as.character(edit3$Month)).

user2363777 30.05.2019 22:42

Я вижу, что typeof(edit3) это список. Я работал с данными с помощью dplyr и tidyr, не знаю, зачем перечислять. Но typeof(edit3$Month) целое число.

akis 30.05.2019 22:48

Можете ли вы отредактировать свой вопрос и добавить вывод dput(head(edit3[,c("Month","Rainfall")],9))?

M-- 30.05.2019 22:50

Да, я почему-то думал, что ggplot будет делать несколько коробчатых диаграмм для целочисленной оси x, но, очевидно, это не так. Вы должны сделать его фактором, но указать порядок уровней.

joran 30.05.2019 22:54

Ну вот, вы можете сделать с целочисленной осью x, вы просто должны указать group = Month.

joran 30.05.2019 22:56

Тип edit3 — это список, потому что фреймы данных — это списки — это списки столбцов.

camille 31.05.2019 02:21

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

camille 31.05.2019 02:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
498
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ваши месяцы подобны факторам, вам просто нужно изменить порядок факторов. Здесь я использовал для этого пакет forcats.

library(dplyr)
library(forcats)

edit31_1 <- edit3 %>% 
  dplyr::mutate(Month = forcats::fct_inorder(Month))

ggplot2::ggplot(edit31_1) +
  geom_boxplot(aes(x = Month, y = Rainfall))


  • Использованы фиктивные данные:
library(ggplot2)

set.seed(1)
edit3 <- data.frame(Month = as.factor(rep(paste(seq(1, 12, 1)), 3)),
                    Rainfall = rnorm(n = 36, mean = 60, sd = 30))

ggplot2::ggplot(edit3) +
  geom_boxplot(aes(x = Month, y = Rainfall))

Другие вопросы по теме