使用 coord_cartesian() 函数时,分组密度图填充颜色消失

Grouped density plot fill colors disappear when using coord_cartesian() function

我目前正面临一个让我头疼的问题,我真的想不出解决办法。

基本上,我正在绘制一个分组密度图(分组变量是 'member_casual',具有 2 个级别的分类变量)。我想要的输出是同一面板上的两条密度曲线(无小平面)。到目前为止,我编写的代码运行良好,并绘制了 2 条具有 2 种不同颜色的重叠密度曲线。

然而,这两条曲线的右尾实在是太平了,所以我使用 coord_cartesian() 来设置 x-axis 限制。我不想 trim 正确的尾巴 obs。因为这样做会改变我的密度曲线。我只是想通过放大来移除图中的尾巴,所以 coord_cartesian() 实际上是我唯一的选择。

问题是:如果我使用 coord_cartesian(),密度曲线填充颜色就会消失,我会得到相同的 2 条带有透明区域的曲线。我做错了什么?

到目前为止,我尝试过:

这里是我数据的一个子集(希望30行足够了,我也删除了所有不必要的变量):

noGeo_data <- structure(list(ride_id = c("1E1D708751A45FBB", "EF150999D6799927", 
"F01C5D9474B37874", "3241CB12D978A919", "3C1E34B72CF1DF6F", "7780E5A193F16BAA", 
"A1250C4C180BDB7A", "DCE53F03D9E930BC", "C1C200854F4A4289", "4613417749115AB3", 
"F02EF690EDD4F285", "39A8B97FBCDE17F0", "6D758C3BA9CD9ACC", "451AFECBD520C5F6", 
"A064FF122A657C26", "0F4D542DEF5C14BE", "A8621985220E1873", "2E5E911966CE495B", 
"ABBBC8112D862E07", "D4B96FE29C9BA6F0", "F8990692B6E4537A", "E852C8A32A5F1A81", 
"0B6BAF9C856FC155", "44B43295891ECBF8", "1DFCB9DF65688E01", "0E2FA7FEF3BC9659", 
"254204CC5A9514F4", "06457F2DE65545D2", "F457BEE1E71539B1", "971A92DBAFBE083D", 
"330440548027D078"), ride_length = c(184, 1705, 1722, 1872, 13262, 
848, 910, 1034, 35, 3639, 132, 1988, 2874, 2729, 1948, 475, 867, 
1847, 2676, 116, 2136, 3499, 39763, 88, 2470, 1744, 1760, 1609, 
3064, 44, 1223), member_casual = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L), .Label = c("casual", 
"member"), class = "factor")), row.names = c(NA, -31L), class = c("tbl_df", 
"tbl", "data.frame"))

下面是我目前编写的代码。

library(tidyverse)
library(ggthemes)

p_rLength <- ggplot(noGeo_data) +
  
  geom_density(
    aes(x = ride_length/60, fill = member_casual, color = member_casual),
    size = 0.8,
    alpha = 0.70
  ) +
  
  scale_fill_manual(values = c("#400F73FF", "#FD9567FF")) +
  scale_color_manual(values = c("#400F73FF", "#FD9567FF")) +
  
  scale_x_continuous(breaks = seq(0,150,30)) +
  scale_y_continuous(breaks = seq(0.00,0.15,0.01)) +
  
  ### coord_cartesian(xlim = c(0,150))+       # error ??
  
  theme_stata() +
  
  theme(
    legend.position = c(.85,.9),
    legend.background = element_rect(color = "whitesmoke"),
    legend.title = element_blank(),
    title = element_text(face = "bold"),
    axis.title = element_text(face = "bold", size = 12),
    panel.background = element_rect(color = "black", fill = "gray80"),
    panel.grid.major.y = element_line(color = "whitesmoke"),
    panel.grid.major.x = element_line(color = "whitesmoke"),
    panel.grid.minor.x = element_line(color = "whitesmoke")
  ) +
  
  ggtitle(label = "Ride length density plot", 
          subtitle = "Grouped by member_casual") +
  
  xlab("ride length (minutes)")

@I_O 回答了我的问题。这是一个实际的错误,它是由 geom_density() alpha 参数引起的。 https://github.com/tidyverse/ggplot2/issues/4498

当 alpha < 1 时会出现此错误。作为解决方法,您可以在 Rstudio 全局选项中将图形设备后端设置为 AGG,此问题不再出现。