Гистограмма с несколькими бинами и группами - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь воспроизвести эти три простые гистограммы, созданные в Excel в R, чтобы что-то более привлекательное для глаз. Я не сомневаюсь, что это просто, но я не практикуюсь с R.

image [! [Data] [1]] [1] ">

[histogram[1]

Я нашел разные учебные пособия для создания базовых c гистограмм, но пока не нашел чего-то, что даст три столбца (представляющих годы) для каждого из интервалов расстояния, а затем три отдельных графики для каждой из групп данных (A, B, C).
Я считаю, что первое, что мне нужно сделать, - это реструктурировать мои данные, и я предполагаю, что это шаг, в котором я не уверен.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Да, вам придется реструктурировать ваши данные. Вы можете сделать это в R, как показано @stefan, или, если это сложно, вы можете сделать это в самом Excel. Чистые данные легко построить и проанализировать (см. раздел 12.1 для аккуратных данных и раздел 3.7, 3.8 для визуализации). Чистые данные будут выглядеть примерно как состоящие из четырех столбцов - Расстояние, Значение, Значение_год, Значение_группа.

enter image description here

Например, я сохранил некоторые данные в виде файла с разделителями табуляции (testdata.txt) и считал их с помощью функции tidyverse read_delim. Ниже приведен пример кода:

library(tidyverse)
foo <- read_delim("testdata.txt", delim = "\t")
foo %>% mutate(Val_year = factor(Val_year, levels=c("2015","2016","2017"))) %>% 
ggplot() + geom_bar(aes(x=Dist, y=Val, fill = Val_year), stat = "identity", position = "dodge") + facet_grid(.~Val_grp)

enter image description here

1 голос
/ 06 апреля 2020

Используя некоторые случайные данные в качестве примера, следующий код представляет собой решение tidyverse, которое дает вам столбчатую или столбчатую диаграмму (поскольку ваши данные уже объединены, это путь к go), имитирующую вашу таблицу Excel для одного набора данных. Как вы уже догадались, сложная часть заключается в получении ваших данных в R (с этой целью: посмотрите на пакет readxl) и перестановке его для построения графиков (это делается с помощью pivot_longer из пакета tidyr и mutate из dplyr, оба из которых являются частью tidyverse. Что касается графика, я использую ggplot2, который - вы, возможно, догадались (; - также часть tidyverse.

# Example data set
set.seed(42)

df <- data.frame(
  distance = paste0(seq(0, 3.5, by = 0.5), "-", seq(0.5, 4, by = 0.5)),
  `2015` = round(runif(8) * 8, 0),
  `2016` = round(runif(8) * 8, 0),
  `2017` = round(runif(8) * 8, 0)
)
df
#>   distance X2015 X2016 X2017
#> 1    0-0.5     7     5     8
#> 2    0.5-1     7     6     1
#> 3    1-1.5     2     4     4
#> 4    1.5-2     7     6     4
#> 5    2-2.5     5     7     7
#> 6    2.5-3     4     2     1
#> 7    3-3.5     6     4     8
#> 8    3.5-4     1     8     8

library(tidyverse)

df %>% 
  # Convert the dataset to long format
  pivot_longer(-distance, names_to = "Year", values_to = "Value") %>% 
  # format the dates, get rid of leading Xs
  mutate(Year = gsub("^X", "", Year)) %>% 
  ggplot(aes(distance, Value, fill = Year)) + 
  # Column chart. Add some width between columns
  geom_col(position = position_dodge2(2)) +
  scale_y_continuous(expand = expansion(mult = c(0, .05))) +
  scale_fill_manual(values = c("blue", "orange", "grey")) +
  # Get rid of axis and legend labels
  labs(y = "", x = "", fill = "") +
  theme_bw() +
  theme(legend.position = "bottom")

Создано в 2020-04-05 пакетом представительство (v0.3.0)

...