Сложенный линейный график с использованием R и ggplot - PullRequest
0 голосов
/ 05 марта 2019

Я испробовал предложения по сгруппированному барплоту здесь, но не могу заставить его работать.

Данные, которые я пытаюсь построить:

Technology   TodayScenario  WindScenario  BiomassScenario  
Biomass        0.130          0.0646         0.182 
Fossil gas     0.0965         0.00309        0     
Coal           0.218          0              0     
Oil            0.00696        0              0     
PV             0.0328         0.0245         0.0266
Waste          0.0420         0              0     
Onshore        0.323          0.311          0.337 
Offshore       0.150          0.597          0.454

Поэтому я пытаюсь построить каждый сценарий с процентным соотношением каждой технологии в сценарии

Я пробовал следующее для получения сложенного сюжета, но не работает.

ggplot(Distribution, 
       aes(x = WindScenario, y = Technology) + 
   geom_bar(stat = "identity")

Ответы [ 4 ]

1 голос
/ 05 марта 2019

Чтобы иметь гистограмму со своими данными, вам нужно будет организовать данные в три столбца - «Технологии», «Значения» и «Сценарии» - вот так (вы можете скопировать и вставить их в консоль):

structure(list(Technology = structure(c(1L, 1L, 1L, 3L, 3L, 3L, 
2L, 2L, 2L, 5L, 5L, 5L, 7L, 7L, 7L, 8L, 8L, 8L, 6L, 6L, 6L, 4L, 
4L, 4L), .Label = c("Biomass", "Coal", "Fossil gas", "Offshore", 
"Oil", "Onshore", "PV", "Waste"), class = "factor"), Values = c(0.13, 
0.0646, 0.182, 0.0965, 0.00309, 0, 0.218, 0, 0, 0.00696, 0, 0, 
0.0328, 0.0245, 0.0266, 0.042, 0, 0, 0.323, 0.311, 0.337, 0.15, 
0.597, 0.454), Scenarios = structure(c(2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L, 1L), .Label = c("Biomass Scenario", "Today Scenario", "Wind Scenario"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-24L))

Сортировка данных сценария по фактору:

df$Scenarios <- factor(df$Scenarios,levels = c("Today Scenario",
                                           "Wind Scenario",
                                           "Biomass Scenario"))

После правильного размещения вы можете вывести следующую гистограмму в ggplot2:

library(ggplot2)
ggplot(df, aes(fill=Technology, y=Values, x=Scenarios)) + 
   geom_bar( stat="identity")

enter image description here

0 голосов
/ 05 марта 2019
ggplot(my_df, 
       aes(x = Technology, y = WindScenario)) + 
  geom_bar(stat = "identity", position = "stack")
0 голосов
/ 05 марта 2019

Для этого вам необходимо сначала реструктурировать данные, чтобы в них было три столбца: Technology, Scenario и Percentage. Что-то вроде:

Technology   Scenario         Percentage     
Biomass      TodayScenario    0.130 
Fossil gas   TodayScenario    0.0965     
Biomass      WindScenario     0.0646
Fossil gas   WindScenario     0.00309
Biomass      BiomassScenario  0.182
Fossil gas   BiomassScenario  0

Вы можете использовать tidyr::gather() для этого.

library(tidyr)

my_df %>%
  gather(Scenario, Percentage, c(TodayScenario, WindScenario, BiomassScenario)) %>%
  ggplot(aes(Scenario, Percentage, fill = Technology)) +
  geom_bar(stat = 'identity')
0 голосов
/ 05 марта 2019

Переключите x и y и закройте скобку ggplot():

ggplot(Distribution, 
       aes(x = Technology, y = WindScenario)) + 
  geom_bar(stat = "identity")

, если вы хотите, чтобы столбцы на вертикальной оси, вы можете добавить coord_flip() к графику

...