Составьте несколько распределений по годам, используя ggplot Boxplot - PullRequest
0 голосов
/ 12 марта 2020

enter image description here

Я пытаюсь оценить вышеупомянутые данные в блокпосте, подобном этому: https://www.r-graph-gallery.com/89-box-and-scatter-plot-with-ggplot2.html

text

Я хочу, чтобы ось х отражала мою переменную "Год", а каждый блок-график оценивал 8 методов как распределение. В конце концов, я хотел бы точно указать переменную «Selected» в отношении этого распределения, но в настоящее время я просто хочу, чтобы эта штука отображалась!

Я понимаю, как кодировать мою переменную y, и я получаю различные ошибки, независимо от того, что Я попробую. Я думаю, что PY должен быть as.factor, но я пробовал некоторый код таким образом, и я просто получаю другие ошибки.

в любом случае вот мой код (Отправить справку):

# Libraries

library(tidyverse)
library(hrbrthemes)
library(viridis)
library(ggplot2)
library(readxl) # For reading in Excel files
library(lubridate) # For handling dates
library(dplyr) # for mutate and pipe functions

# Path to current and prior data folders
DataPath_Current <- "C:/R Projects/Box Plot Test"

Ult_sum <- read_excel(path = paste0(DataPath_Current, "/estimate.XLSX"), 
                                           sheet = "Sheet1",
                                           range = "A2:J12",
                                           guess_max = 100)

# just want to see what my table looks like
Ult_sum
# create a dataset - the below is code I commented out

# data <- data.frame(
# name=c(Ult_sum[,1]),
#     value=c(Ult_sum[1:11,2:8])
#)

value <- Ult_sum[2,]

  # Plot
Ult_sum %>%
  ggplot( aes(x= Year, y= value, fill=Year)) +
  geom_boxplot() +
  scale_fill_viridis(discrete = TRUE, alpha=0.6) +
  geom_jitter(color="black", size=0.4, alpha=0.9) +
  theme_ipsum() +
  theme(
    legend.position="none",
    plot.title = element_text(size=11)
  ) +
  ggtitle("A boxplot with jitter") +
  xlab("")

1 Ответ

3 голосов
/ 12 марта 2020

Я не вижу, как ваш код соответствует скриншоту вашего набора данных. Однако, просто общая подсказка: ggplot любит данные в длинном формате. Я предлагаю вам изменить ваши данные, используя tidyr::reshape_long oder data.table::melt. Таким образом, вы получите 3 столбца: год, метод, значение, из которых первые два должны быть фактором. Полученный набор данных затем можно аккуратно использовать в aes() как aes(x=year, y=value, fill=method).

Редактировать: добавлен пример. Делает ли это то, что вы хотите?

library(data.table)
library(magrittr) 
library(ggplot2)
DT <- data.table(year = factor(rep(2010:2014, 10)),
                 method1 = rnorm(50),
                 method2 = rnorm(50),
                 method3 = rnorm(50))

DT_long <- DT %>% melt(id.vars = "year")

ggplot(DT_long, aes(x = year, y = value, fill = variable)) +
geom_boxplot()

enter image description here

...