Я использовал 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.
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"))
Я только что попробовал это, используя edit3$Month <- as.integer(edit3$Month)
, и в результате получилась только одна диаграмма общих значений Rainfall. Любое предложение?
Спасибо, проверю оба. Не удалось найти дубликат.
Не без реального воспроизводимого примера для работы. Но я могу сказать вам со 100% уверенностью, что порядок, который вы видите, связан с тем, что этот столбец изначально был либо символом, либо фактором. Если бы это был фактор, то as.integer
не обязательно преобразовал бы его так, как вы хотите. См. мою вторую ссылку.
Следуя последнему комментарию Джорана, если ваша переменная является фактором, вам необходимо преобразовать ее в текст, прежде чем преобразовывать в числовой. Попробуйте edit3$Month = as.integer(as.character(edit3$Month))
.
Я вижу, что typeof(edit3)
это список. Я работал с данными с помощью dplyr и tidyr, не знаю, зачем перечислять. Но typeof(edit3$Month)
целое число.
Можете ли вы отредактировать свой вопрос и добавить вывод dput(head(edit3[,c("Month","Rainfall")],9))
?
Да, я почему-то думал, что ggplot будет делать несколько коробчатых диаграмм для целочисленной оси x, но, очевидно, это не так. Вы должны сделать его фактором, но указать порядок уровней.
Ну вот, вы можете сделать с целочисленной осью x, вы просто должны указать group = Month
.
Тип edit3
— это список, потому что фреймы данных — это списки — это списки столбцов.
Возможный дубликат Метки числовых осей в неправильном порядке
Поскольку ваши месяцы подобны факторам, вам просто нужно изменить порядок факторов. Здесь я использовал для этого пакет 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))
Месяцы упорядочены лексикографически, скорее всего, потому, что этот столбец является символом или фактором. Преобразуйте его в числовой столбец.