在ggplot2条形图中使每个数据点都有自己的标记

Make each data point its own mark in ggplot2 bar chart

我正在为 R 中的 ggplot 报告自动化重新创建一系列图形和图表,其中一个是下图。原始图表的每个数据点都有自己的标记(我敢肯定有更好的方式来表达这一点,但我现在想不起来,抱歉),我很确定我几年前见过类似的东西但是我又不记得了。 ggplot 中是否有任何 function/argument 允许我将第一张图表更改为第二张图表。

我目前的图表;

我想要的输出(请原谅糟糕的绘画尝试);

示例数据:

df <- data.frame(person = c("staff", "staff", "customer", "staff", "customer", "customer", "customer", "staff", "customer", "staff"),
                 date = c("August", "August", "September", "September", "September", "October", "October", "October", "October", "November"))

示例代码:

    figure1 <-
  df %>%
  ggplot() + 
  geom_bar(
    mapping = aes(
      x = date, 
      fill = person),
    col = "black"
  ) %>%
  scale_x_date(
    date_breaks = "1 month",
    date_labels = "%b"
  )

谢谢!

我不知道 ggplot2 中有现成的函数可以为您执行此操作,但 stat_bin() 的缺点是它汇总了数据,而您必须为您的直方图跳过此汇总步骤。

这是一个辅助函数,可以将 bins 分配给可以与 geom_col() 一起使用的观测值。我还添加了一个黄色的直方图,以显示轮廓是相同的。

library(ggplot2)

binwidth <- 0.1

# Helper function for histogram
assign_bin <- function(x, binwidth = 0.1) {
  cuts <- seq(min(x) - binwidth, 
              max(x) + binwidth, 
              by = binwidth)
  cuts[findInterval(x, cuts)]
}

ggplot(iris) +
  geom_col(
    aes(x = assign_bin(Sepal.Width, binwidth), 
        y = 1,
        fill = Species),
    width = binwidth,
    colour = "black",
    position = "stack"
  ) +
  geom_histogram(
    aes(Sepal.Width),
    binwidth = 0.1,
    fill = NA,
    colour = "yellow"
  )

reprex package (v1.0.0)

于 2021-03-30 创建