Многострочные метки с вложенными группирующими переменными для столбчатой ​​диаграммы с накоплением в - R - PullRequest
0 голосов
/ 20 сентября 2018

Я хотел бы создать столбчатую диаграмму с несколькими категориями с вложенной помеченной осью X, используя ggplot, аналогично той, которую я создал в Excel, как показано здесь.

enter image description here

Я попытался использовать приведенный пример здесь для столбчатой ​​диаграммы без стека, используя facet_wrap(), в результате чего

enter image description here

но, как вы видите, этот код распределяет столбцы очень далеко друг от друга и не объединяет кластеризованные столбцы с уровнями категорий (т. Е. 2017,2030,2040)рядом друг с другом.

Я также попытался использовать пример здесь , но это допускает только один уровень X-категории, а не два.

Я добавил несколько примеровприведенный ниже код (уменьшен по сравнению с исходным, но с тем же намерением).

Некоторая помощь будет отличной!

data1 <- read.table(text = "Property Category Datetime Value
               PoolRevenue Nuclear 2017 73
               PoolRevenue Nuclear 2030 75
               PoolRevenue CCGT 2017 57
               PoolRevenue CCGT 2030 45
               PoolRevenue Hydro 2017 23
               PoolRevenue Hydro 2030 28
               ReservesRevenue Nuclear 2017 34
               ReservesRevenue Nuclear 2030 37
               ReservesRevenue CCGT 2017 34
               ReservesRevenue CCGT 2030 9
               ReservesRevenue Hydro 2017 23
               ReservesRevenue Hydro 2030 36
               OtherRevenue Nuclear 2017 96
               OtherRevenue Nuclear 2030 98
               OtherRevenue CCGT 2017 55
               OtherRevenue CCGT 2030 53
               OtherRevenue Hydro 2017 60
               OtherRevenue Hydro 2030 65", header=TRUE)
data2 <- read.table(text = "Property Category Datetime Value
                GenCost Nuclear 2017 -10
                GenCost Nuclear 2030 -20
                GenCost CCGT 2017 -15
                GenCost CCGT 2030 -20
                GenCost Hydro 2017 -10
                GenCost Hydro 2030 -15
                FixedCosts Nuclear 2017 -13
                FixedCosts Nuclear 2030 -11
                FixedCosts CCGT 2017 -30
                FixedCosts CCGT 2030 -12
                FixedCosts Hydro 2017 -15
                FixedCosts Hydro 2030 -12", header=TRUE)
data1$Datetime <- as.factor(data1$Datetime)
data2$Datetime <- as.factor(data2$Datetime)
p1 <-ggplot()
p2 <-  p1+ geom_bar(data=data1,aes_string(x="Datetime",y="Value",fill="Property"),stat="identity", position = position_stack(reverse = TRUE))+guides(fill = guide_legend(reverse=TRUE))
p3 <-  p2+ geom_bar(data=data2,aes_string(x="Datetime",y="Value",fill="Property"),stat="identity", position = position_stack(reverse = TRUE))+guides(fill = guide_legend(reverse=TRUE))
p4 <- p3 +facet_wrap(c("Category","Datetime"), strip.position = "bottom", scales = "free_x") + theme(panel.spacing = unit(0, "lines"), strip.background = element_blank(), strip.placement = "outside")

(Обратите внимание, поскольку в моем столбце с накоплением есть как положительные, так и отрицательные значенияграфики, я применяю их как отдельные слои, но я не думаю, что это должно влиять на оси.)

1 Ответ

0 голосов
/ 20 сентября 2018

Вы имеете в виду что-то подобное?

# merge your data   
data_x <- rbind(data1,data2)

    p1 <-ggplot()
 p1+ geom_bar(data=data_x,aes_string(x="Datetime",y="Value", fill ="Property"),stat="identity")+
   facet_wrap(vars(Category), strip.position = "bottom", scales = "free_x")+ 
   theme(panel.spacing = unit(0, "lines"),
         strip.background = element_blank(),
         axis.line = element_line(colour = "grey"),
         panel.grid.major.y =element_line(colour = "grey"),
         strip.placement = "outside",
         axis.text.x = element_text(angle = 90, hjust = 1),
         panel.background = element_rect(fill = 'white', colour = 'white')
         )

enter image description here

РЕДАКТИРОВАТЬ

Если вы хотитечтобы установить переменные, вы можете попробовать это:

x <-"Datetime"
y <- "Value"
filler <- "Property"
    p1 <-ggplot()
 p1+ geom_bar(data=data_x,aes_string(x=x,y=y, fill =filler),stat="identity")+
   facet_wrap(vars(Category), strip.position = "bottom", scales = "free_x",  nrow=1)+ 
   theme(panel.spacing = unit(0, "lines"),
         strip.background = element_blank(),
         axis.line = element_line(colour = "grey"),
         panel.grid.major.y =element_line(colour = "grey"),
         strip.placement = "outside",
         axis.text.x = element_text(angle = 90, hjust = 1),
         panel.background = element_rect(fill = 'white', colour = 'white')
         )
...