我正在尝试创建一个图表。这是数据的代码:
ea3 <- ddply(dias_semana, c("mes","weekday", "member_casual", "rideable_type"), summarise, n = sum(n))
ea3$rideable_type <- factor(ea3$rideable_type, levels = c("classic_bike", "electric_bike"))
ea3$fill_var <- factor(interaction(ea3$member_casual, ea3$rideable_type),
levels = c("casual.classic_bike", "casual.electric_bike",
"member.classic_bike", "member.electric_bike"))
这是 ggplot 代码。
theme_set(theme_bw(base_size = 12))
plot_diassem_m_mc = ggplot(ea3, aes(x=factor(weekday,
level = c("lunes","martes","miércoles",
"jueves","viernes","sábado",
"domingo")), y = n, fill=fill_var)) +
geom_bar(stat = "identity", position=position_dodge(), width = 0.7)+
theme(plot.title=element_text(size=11))+
theme(axis.text.x=element_blank(),
axis.ticks.x=element_blank())+
theme(axis.title=element_text(size=10))+
theme(axis.text.y=element_text(size=8))+
theme(legend.title=element_blank())+
labs(title = "Gráfico 11. Número de viajes por cada día de la semana, según mes",
x = "",
y = "")+
facet_wrap(~mes)+
theme(strip.text = element_text(size = 7, color = "dark green"))+
theme(legend.key.height= unit(0.2, 'cm'),
legend.key.width= unit(0.3, 'cm'),
legend.text = element_text(size=9))+
scale_fill_discrete(labels=c('casuales (bici clásica)', 'casuales (bici eléctrica)',
'miembros (bici clásica)', 'miembros (bici eléctrica)'))
print(plot_diassem_m_mc)
结果是这个图:
在此图中,我们有 12 个月。每个月中,一周中的每一天都有四个条形。最左边的四个条代表周一的值,最右边的四个条代表周日的值。其他的属于一周中的其他日子。所以,我想要两个而不是四个。一个栏用于休闲栏,另一个栏用于会员栏(member_casual 列)。然后,我想将每个栏分为两部分:一个用于经典自行车,一个用于电动自行车(每个部分应具有不同的颜色)。最后,我想要一个图表,其中一周的每一天都有两个条形,并且由于经典自行车和电动自行车的划分,每个条形应该有两种不同的颜色。
请您帮忙解决这个问题。预先感谢。
我只能想到通过大量的手动计算和geom_rect()来做到这一点。每天都会给出一个整数值,然后根据casual_member 的值向左或向右移动矩形,如果值为 elec,则向上移动矩形。显然,这只是一个草图。 我留下了 DF 的中间打印作为注释。使用这些可以帮助您了解数据框架是如何构建的。 因为你没有发布任何数据,所以我发明了一个小数据集。
library(tidyverse)
DF <- data.frame(Month = rep(c("Feb", "Mar"), each = 8),
Day = rep(c("Mon", "Tues"), 8),
casual_member =rep(rep(c("casual", "member"),each=4),2),
Elec = rep(c("classic", "classic", "elec", "elec"), 4),
Value = c(23,14,10,25,22,16,8,19,20,7,15,21,17,10,18,9))
#DF
DF <- DF |> mutate(JoinValue = ifelse(Elec == "classic", "elec", "classic"))
#DF
DF <- inner_join(DF, DF, by = c("Month", "casual_member", "Day", Elec = "JoinValue"))
#DF
DF <- DF |> mutate(ymin = ifelse(Elec == "classic", 0, Value.y),
ymax = ifelse(Elec == "classic", Value.x, Value.x + Value.y),
x_center = case_when(
Day == "Mon" ~ 1,
Day == "Tues" ~ 2
),
x_shift = case_when(
casual_member == "casual" ~ -0.2,
TRUE ~ 0.2
),
X = x_center + x_shift)
#DF
ggplot(DF, aes(xmin = X - 0.2, xmax = X + 0.2, ymin = ymin, ymax = ymax,
fill = interaction(Elec, casual_member))) + geom_rect() +
facet_wrap(~Month) +
scale_x_continuous(breaks = c(1,2), labels = c("Mon", "Tues")) +
labs(fill = "Categories")
创建于 2024-10-09,使用 reprex v2.1.1