R 堆放钢筋的顺序ggplot2-土壤剖面

R 堆放钢筋的顺序ggplot2-土壤剖面,r,ggplot2,R,Ggplot2,ggplot2中的条形图显示(参见示例3): 当多个条形图放置在同一位置时,条形图将自动堆叠。填充顺序设计为与图例匹配 出于某种原因,第二句对我不起作用。下面是一个示例数据集,它表示地面(落叶层等)和地下(实际土壤)的土壤层: 它适用于L、F、H,但不适用于A、B(地下,即负值)。它可能不起作用的原因是堆叠的钢筋按站点(分别针对正值和负值)从最大到最小排序,然后以自上而下的方式堆叠。这是正确的吗?如果是这样的话,那么对于我的正值来说,图例与我相信的堆叠条匹配只是巧合 我想实现的是,钢筋的堆叠与

ggplot2
中的条形图显示(参见示例3):

当多个条形图放置在同一位置时,条形图将自动堆叠。填充顺序设计为与图例匹配

出于某种原因,第二句对我不起作用。下面是一个示例数据集,它表示地面(落叶层等)和地下(实际土壤)的土壤层:

它适用于
L
F
H
,但不适用于
A
B
(地下,即负值)。它可能不起作用的原因是堆叠的钢筋按
站点
(分别针对正值和负值)从最大到最小排序,然后以自上而下的方式堆叠。这是正确的吗?如果是这样的话,那么对于我的正值来说,图例与我相信的堆叠条匹配只是巧合


我想实现的是,钢筋的堆叠与图例中的顺序(从上到下)相匹配,因此在横截面视图中查看时,也与土壤剖面相匹配,我不确定如何实现这一点

我确实试图改变排序行为,但它产生了与上面相同的图:

df %>% 
  mutate(horizon = factor(horizon, levels = c("L","F","H","A","B")))  %>% 
  arrange(desc(value)) %>% 
  ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")

df %>% 
  mutate(horizon = factor(horizon, levels = c("L","F","H","A","B")))  %>% 
  arrange(value) %>% 
  ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")

我可能必须分别对正值和负值进行排序,也就是分别进行降序和升序?

堆叠条形图中的排序是根据相应因子的级别进行的。可能出现的问题是反向叠加的负值(从负值顶部向0方向)。为了说明问题,让我们将所有值设为负值:

df %>%  
  mutate(horizon = factor(horizon, levels = c("L","F","H","B","A"))) %>%
  ggplot(aes(site, value - 20)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")

一种解决方法是指定不同的级别顺序,从而产生所需的填充顺序(在这种情况下:
级别=c(“L”、“F”、“H”、“B”、“A”)
),并使用
比例填充离散
手动调整图例:

df %>%  
  mutate(horizon = factor(horizon, levels = c("L","F","H","B","A"))) %>%
  ggplot(aes(site, value)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")+
  scale_fill_discrete(breaks = c("L","F","H","A","B"))

预期输出是什么?
factor
中的
levels
参数是否与预期输出匹配?@AdamQuek是的
factor
中的levels
参数
应该与预期输出匹配。是的,这是我已经猜测到的堆叠行为。由于这些土壤层位按照定义的特定顺序排列,因此我无法切换它们,即在挖掘土壤剖面时,层位a位于层位B之前。所以A更接近表面,然后是B。这有意义吗?我想实现的是以与我的图例相同的方式堆叠钢筋:L,F,H,A,B。所以我的绘图中图例的顺序是正确的,但我希望堆叠也能反映这一点。目前它只对L,F,H做,而对A,B做了转换。我希望我没有把事情弄得太复杂。是的,就是这样!!也许如果你能写一两句话来解释发生了什么以及为什么,那就太棒了!我现在不在电脑上。我仍然不完全理解为什么你需要把级别排序为L,F,H,B,A,而不是像我那样,L,F,H,A,B。。。
scale\u fill\u discrete
breaks
参数是否可以在不将级别更改为B,A的情况下解决问题?无论如何,我会玩它以后,让你知道,如果事情仍然不是100%清楚。谢谢指定分隔符会更改图例中项目的顺序(仅在堆叠条形图的图例中)。更改标高顺序对于以正确顺序绘制负值的标高是必要的。堆栈顺序对应于正值的级别顺序,而负值的级别顺序相反。因此,为了获得期望的输出,必须反转负值的电平。希望它更清楚一点。
df %>%  
  mutate(horizon = factor(horizon, levels = c("L","F","H","B","A"))) %>%
  ggplot(aes(site, value - 20)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")
df %>%  
  mutate(horizon = factor(horizon, levels = c("L","F","H","B","A"))) %>%
  ggplot(aes(site, value)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")+
  scale_fill_discrete(breaks = c("L","F","H","A","B"))