Расположить ось X в порядке возрастания - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь построить в столбчатой ​​диаграмме с накоплением совокупную стоимость семи различных единиц, используя ggplot2 и geom_col.Проблема, с которой я сталкиваюсь, заключается в том, что когда я строю данные, по оси x я не получаю единицы в возрастающем порядке.

> b1
  Unit variable   value
  1   60k      BOM 2950806
  2  100k      BOM 3236021
  3  120k      BOM 3533470
  4  140k      BOM 3611764
  5  170k      BOM 3855279
  6  200k      BOM 4166095
  7  230k      BOM 4468843
  8   60k     NaOH  255676
  9  100k     NaOH  255676
  10 120k     NaOH  255676
  11 140k     NaOH  255676
  12 170k     NaOH  255676
  13 200k     NaOH  255676
  14 230k     NaOH  255676
library(ggplot2)
p1 <- ggplot(b1, aes(Unit, value, fill = variable))+
geom_col(position = "stack", colour = "black")+
labs(x = expression("Unit size"),
   y = expression("Cost"*" / [NOK]"))+
theme_bw()+
theme(plot.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank())
p1

Я ожидаю, что на оси x будут отображаться 60k, 100k, 120k,140К, 200К, 230К, но вместо этого он показывает

100К, 120К, 140К, 200К, 230К, 60К.

1 Ответ

0 голосов
/ 30 сентября 2019

Если вы расположите свои уровни в нужном порядке:

level_order <- c('60k', '100k', '120k', '140k', '170k', '200k', '230k') 

Вы можете использовать это на графиках без изменения базовых данных.

Дайте мне знать, если это то, что вы имели вmind.

b1 <- read.table(text =
"Unit variable   value
   60k      BOM 2950806
  100k      BOM 3236021
  120k      BOM 3533470
  140k      BOM 3611764
  170k      BOM 3855279
  200k      BOM 4166095
  230k      BOM 4468843
   60k     NaOH  255676
  100k     NaOH  255676
 120k     NaOH  255676
 140k     NaOH  255676
 170k     NaOH  255676
 200k     NaOH  255676
 230k     NaOH  255676", header = T)

library(ggplot2)

level_order <- c('60k', '100k', '120k', '140k', '170k', '200k', '230k') 

p1 <- ggplot(b1, aes(factor(Unit, level = level_order), value, fill = variable))+
  geom_col(position = "stack", colour = "black")+
  labs(x = expression("Unit size"),
       y = expression("Cost"*" / [NOK]"))+
  theme_bw()+
  theme(plot.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())
p1

В качестве альтернативы, если вы хотите изменить уровни факторов в переменной b1, вы можете сделать следующее, и вам не нужно изменять ваш оператор ggplot:

b1$Unit <- factor(b1$Unit, levels = c('60k', '100k', '120k', '140k', '170k', '200k', '230k'))

plot with units in correct order

...