0

我正在尝试使用 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。

4

1 回答 1

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'))

以正确的顺序绘制单位

于 2019-09-30T14:18:03.270 回答