按升序排列x轴

时间:2019-09-27 15:20:47

标签: r ggplot2 stacked-chart geom-col

我正在尝试使用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,140k,200k,230k,但相反,它显示

100k,120k,140k,200k,230k,60k。

1 个答案:

答案 0 :(得分:0)

如果您按所需顺序放置关卡:

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

您可以在绘图中使用它而无需更改基础数据。

让我知道这是否是您的初衷。

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