使用 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 条带有透明区域的曲线。我做错了什么?
到目前为止,我尝试过:
- 在
geom_density()
之后立即移动 coord_cartesian()
代码块。
- 正在删除
theme_stata()
块。
这里是我数据的一个子集(希望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,此问题不再出现。
我目前正面临一个让我头疼的问题,我真的想不出解决办法。
基本上,我正在绘制一个分组密度图(分组变量是 'member_casual',具有 2 个级别的分类变量)。我想要的输出是同一面板上的两条密度曲线(无小平面)。到目前为止,我编写的代码运行良好,并绘制了 2 条具有 2 种不同颜色的重叠密度曲线。
然而,这两条曲线的右尾实在是太平了,所以我使用 coord_cartesian()
来设置 x-axis 限制。我不想 trim 正确的尾巴 obs。因为这样做会改变我的密度曲线。我只是想通过放大来移除图中的尾巴,所以 coord_cartesian()
实际上是我唯一的选择。
问题是:如果我使用 coord_cartesian()
,密度曲线填充颜色就会消失,我会得到相同的 2 条带有透明区域的曲线。我做错了什么?
到目前为止,我尝试过:
- 在
geom_density()
之后立即移动coord_cartesian()
代码块。 - 正在删除
theme_stata()
块。
这里是我数据的一个子集(希望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,此问题不再出现。