如何为堆叠的条形图中的两列着色

时间:2019-11-27 18:13:14

标签: r ggplot2 stacked-chart

你好堆栈溢出社区,

我正在尝试寻找一种方法来着色两列,并设法将它们放到堆叠的条形图中。 X轴表示月份,而列表示年份(分别为“ n-1”年和“ n”年)和业务类型。业务类型很容易上色,因为它是填充,但是我找不到找到“ n-1”年和“ n”年列具有不同颜色的方法,或者是澄清每月每个列代表的颜色的方法。不同的一年。

为清楚起见,数据如下所示: enter image description here

这是我到目前为止使用的代码:


guard let currentRenderPassDescriptor = view.currentRenderPassDescriptor,
            let currentDrawable = view.currentDrawable,
            let renderPipelineState = renderPipelineState,
            let encoder = commandBuffer.makeRenderCommandEncoder(descriptor: currentRenderPassDescriptor)
        else {
            semaphore.signal()
            return
        }

        encoder.pushDebugGroup("RenderFrame")
        encoder.setRenderPipelineState(renderPipelineState)

        encoder.setVertexBytes(&textureOccupiedDimensions, length:  MemoryLayout<vector_int2>.size, index: 0)
        encoder.setVertexBytes(&viewportSize, length:  MemoryLayout<vector_int2>.size, index: 1)
        encoder.setFragmentTexture(texture, index: 0)
        encoder.drawPrimitives(type: .triangleStrip, vertexStart: 0, vertexCount: 4, instanceCount: 1)
        encoder.popDebugGroup()

        encoder.endEncoding()

        commandBuffer.addScheduledHandler { [weak self] (buffer) in
            guard let unwrappedSelf = self else { return }

            unwrappedSelf.didRenderTexture(texture, withCommandBuffer: buffer, device: device)
            unwrappedSelf.semaphore.signal()
        }

        commandBuffer.present(currentDrawable) // schedules display at next possible refresh point
        commandBuffer.commit()

还有一张图形图片,因此您可以更轻松地理解我的意思(每月两列之间无区别): enter image description here 任何帮助将不胜感激!预先非常感谢。

1 个答案:

答案 0 :(得分:0)

在这里使用构面层是一种更好的方法,但是到现在为止,我很确定您已经知道该怎么做。

我的建议是创建一个新变量,将yerabusiness粘贴在一起,并将其用作填充样式。

数据

df <- data.frame(
  year = rep(c(2017, 2018), each = 24),
  gwp = rnorm(48, mean = 10000, sd = 300),
  month = rep(1:12, 4),
  business = rep(
    c(
      rep("new", 12),
      rep("renewal", 12)
    )
  )
)

df <- df %>%
  mutate(
    fill = paste(business, year, sep = "-")
  )

情节

  ggplot() +
  geom_col(
    data = df %>% filter(year == 2018),
    aes(x = month, fill = fill, y = gwp),
    width = barwidth
  ) +
    geom_col(
      data = df %>% filter(year == 2017),
      aes(x = month + as.numeric(barwidth) + 0.05, fill = fill, y = gwp),
      width = barwidth
    )

enter image description here

如果您使用新变量创建一个因子,并根据需要对图例标签进行排序。

另一种方法是控制apha,您可以在this question的答案中看到如何做到这一点