2017-10-20 58 views
1

documentation为条形图中ggplot2说(见例3):当多个棒放置在同一位置依次层叠酒吧GGPLOT2 - 土壤剖面

条形图自动堆叠。填充顺序的设计与图例相匹配。

由于某种原因,第二句对我不起作用。下面是一个例子的数据集,其代表土层上述(落叶层等)和地下(实际土):

df <- structure(list(horizon = structure(c(5L, 3L, 4L, 2L, 1L, 5L, 
3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L, 
4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L), .Label = c("A", "B", "F", "H", 
"L"), class = "factor"), site = structure(c(1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("A", "B", "C", 
"D", "E", "F"), class = "factor"), value = c(2.75, 0.5, 0.25, 
-4.125, -3.375, 3.78125, 1.375, 0.625, -10.6875, -6.34375, 4.28, 
2.065, 0.68, -12.1, -10.75, 8.583333333, 4.541666667, 2.166666667, 
-10.70833333, -4.25, 7.35, 4, 1.8, -13.95, -5.175, 1.933333333, 
1.245833333, 0.641666667, -11.16666667, -2.291666667)), .Names = c("horizon", 
"site", "value"), class = "data.frame", row.names = c(NA, -30L 
)) 

现在我尝试通过首先指定土壤层级别的顺序绘制数据(即视野,自上而下地):

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

enter image description here

它为LFH而不是AB(以下GR即负值)。其原因可能不起作用的原因是,堆叠酒吧的排序从最大到最小为site(分别为正值和负值),然后以上下方式堆叠。它是否正确?如果是这样的话,那么对于我的积极价值来说,这只是巧合,这个传说与我相信的堆叠酒吧相匹配。

我想要实现的是在图例中叠加条形图的顺序(从顶部到底部),因此在横截面视图中查看土壤剖面时,我不确定如何来解决这个问题。

我曾尝试改变总体排序行为,但它产生同样的情节如上:

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

什么是预期Ø本安输出? 'factor'中的'levels'参数是否与预期的输出相匹配? –

+0

@AdamQuek是的'factor'中的''参数'的水平应该与期望的输出相匹配。 – Stefan

回答

2

根据相应因子的等级对堆积条形图进行排序。潜在的问题出现在反向堆叠的负值(从负向顶部朝向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)") 

enter image description here

一种解决方法是指定一个不同的顺序水平,这将导致以期望填充次序的(在这种情况下:levels = c("L","F","H","B","A"))和手动调整使用scale_fill_discrete传说:

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

enter image description here

+0

是的,这就是我已经猜测的堆叠行为。由于这些土壤地平线按照定义按特定顺序排列,因此我无法切换它们,即在挖掘土壤剖面时地平线A出现在地平线B之前。所以A更接近表面,然后出现B.这是否有意义? – Stefan

+0

我想实现的是以与我的传奇相同的方式堆叠酒吧:L,F,H,A,B。因此,我的情节中图例的顺序是正确的,但我希望堆叠反映也是如此。目前它只对L,F,H做它,它转换为A,B。我希望我不会让事情太复杂。 – Stefan

+0

是的,就是这样!也许如果你能写一两句话来解释发生了什么,为什么,那真是太棒了! – Stefan