如何在 geom_bar ggplot2 中更改颜色,IFelse 不起作用
How to Change colors IF in geom_bar ggplot2, IFelse dont work
为什么运算符 if 在此上下文中不起作用?
带数据的主文件
structure(list(age = c("0-4", "05-09", "10-14", "15-19", "20-24",
"25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59",
"60-64", "65-69", "70-74", "75-79", "80-84", "85+", "0-4", "05-09",
"10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44",
"45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79",
"80-84", "85+", "0-4", "05-09", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64",
"65-69", "70-74", "75-79", "80-84", "85+", "0-4", "05-09", "10-14"
), gender = c("F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "M", "M", "M"), year = c(2011, 2011,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2011, 2011, 2011, 2011, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 2011, 2011, 2011
), pop = c(25.4759696688669, 21.129961995163, 20.711726947066,
27.4762242467223, 30.8584728965505, 31.4039968723292, 38.3503354972451,
39.695961304166, 31.476733402433, 31.6403905951667, 32.6405178840943,
38.2048624370374, 38.7867546778681, 28.4945356681759, 21.4390922481043,
17.5658720200753, 14.3109122979288, 9.47393304602404, 21.1892611493233,
27.4018193920568, 30.7299755935212, 31.8208712373345, 39.4571407440278,
39.8639153908735, 31.0627912136676, 31.2846682937653, 33.2815620146439,
39.4756305007026, 40.751423711264, 30.7854448635456, 25.3494564011538,
24.0921529472672, 25.330966644479, 21.6699948228681, 8.20945196361216,
1.92293469417942, 29.7360023208587, 31.567304902814, 40.125471424427,
40.9413983173774, 31.404119524224, 31.3134609805628, 31.9299390774587,
38.6568030171163, 40.361183637946, 30.1892950391645, 25.1486800116043,
26.2365825355382, 29.3552364374819, 30.4794023788802, 16.1372207716855,
18.53060632434, 13.6713083841021, 6.67246881346098, 28.4036150055462,
22.8210863200771, 22.020984488935)), row.names = c(NA, 57L), class = "data.frame")
这是文件中包含基本数据的部分。 2001年的左右两边如何做不同的颜色不太清楚,我想做两个年龄结构的对比,最理想的是图的两边只做一年不同的颜色
library(dplyr)
library(tidyr)
library (ggthemes)
library(readxl)
library(ggplot2)
pyramidRak1 <- read_excel("~/MetodyVSG/U3/Rstudio/pyramidRak1.xlsx")
df3= data.frame(pyramidRak1)
rgb.val <- col2rgb("white")
t.col <- rgb(rgb.val[1], rgb.val[2], rgb.val[3],
max = 255,
alpha = (100 - 99) * 255 / 100,
names = "blue")
ggplot(data = df3, aes(x = age, y = pop, fill = (as.factor(year)), color=gender,width = 1)) +
geom_bar(data = df3 %>% filter(gender == "F", year != 2011) %>% arrange(rev(year)),
stat = "identity",
position = "identity") +
geom_bar(data = df3 %>% filter(gender == "M", year != 2011) %>% arrange(rev(year)),
stat = "identity",
position = "identity",
mapping = aes(y = -pop)) +
coord_flip() +
scale_y_continuous(labels= abs, limits = (45)*c(-1,1)) +
geom_hline(yintercept = 0) +
scale_fill_economist() +
labs(title = NULL, x = "Věk", y = "Může Podíl obyvatel (v ‰) Ženy",face="bold")+
theme_bw()+
guides(fill=guide_legend(title=NULL))+
scale_fill_manual(values=c(t.col,if ("gender" == "M") {"blue"} else {"pink"}))
不确定我是否做对了。
因为您希望填充颜色同时反映年份和性别,您可以将 year
和 gender
的交互映射到 fill
并为每个组合设置填充颜色通过 scale_fill_manual
.
此外,我稍微简化了您的代码。
library(ggplot2)
library(dplyr)
df4 <- df3 %>%
filter(year != 2011) %>%
mutate(gender_year = interaction(gender, year)) %>%
# Sort data
arrange(year)
ggplot(data = df4, aes(x = age, y = ifelse(gender == "F", pop, -pop), fill = gender_year), width = 1) +
geom_bar(stat = "identity", position = "identity") +
scale_y_continuous(labels= abs, limits = (45)*c(-1,1)) +
coord_flip() +
geom_hline(yintercept = 0) +
labs(title = NULL, x = "Vek", y = "Muze Podil obyvatel (v %) Zeny", fill = NULL) +
theme_bw() +
scale_fill_manual(values = c(F.1991 = "pink", M.1991 = "blue", F.2001 = "red", M.2001 = "red")) +
theme(
axis.title.x = element_text(color = "black", size = 14, face = "bold"),
axis.title.y = element_text(color = "black", size = 14, face = "bold")
为什么运算符 if 在此上下文中不起作用?
带数据的主文件
structure(list(age = c("0-4", "05-09", "10-14", "15-19", "20-24",
"25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59",
"60-64", "65-69", "70-74", "75-79", "80-84", "85+", "0-4", "05-09",
"10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44",
"45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79",
"80-84", "85+", "0-4", "05-09", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64",
"65-69", "70-74", "75-79", "80-84", "85+", "0-4", "05-09", "10-14"
), gender = c("F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "M", "M", "M"), year = c(2011, 2011,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2011, 2011, 2011, 2011, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 2011, 2011, 2011
), pop = c(25.4759696688669, 21.129961995163, 20.711726947066,
27.4762242467223, 30.8584728965505, 31.4039968723292, 38.3503354972451,
39.695961304166, 31.476733402433, 31.6403905951667, 32.6405178840943,
38.2048624370374, 38.7867546778681, 28.4945356681759, 21.4390922481043,
17.5658720200753, 14.3109122979288, 9.47393304602404, 21.1892611493233,
27.4018193920568, 30.7299755935212, 31.8208712373345, 39.4571407440278,
39.8639153908735, 31.0627912136676, 31.2846682937653, 33.2815620146439,
39.4756305007026, 40.751423711264, 30.7854448635456, 25.3494564011538,
24.0921529472672, 25.330966644479, 21.6699948228681, 8.20945196361216,
1.92293469417942, 29.7360023208587, 31.567304902814, 40.125471424427,
40.9413983173774, 31.404119524224, 31.3134609805628, 31.9299390774587,
38.6568030171163, 40.361183637946, 30.1892950391645, 25.1486800116043,
26.2365825355382, 29.3552364374819, 30.4794023788802, 16.1372207716855,
18.53060632434, 13.6713083841021, 6.67246881346098, 28.4036150055462,
22.8210863200771, 22.020984488935)), row.names = c(NA, 57L), class = "data.frame")
这是文件中包含基本数据的部分。 2001年的左右两边如何做不同的颜色不太清楚,我想做两个年龄结构的对比,最理想的是图的两边只做一年不同的颜色
library(dplyr)
library(tidyr)
library (ggthemes)
library(readxl)
library(ggplot2)
pyramidRak1 <- read_excel("~/MetodyVSG/U3/Rstudio/pyramidRak1.xlsx")
df3= data.frame(pyramidRak1)
rgb.val <- col2rgb("white")
t.col <- rgb(rgb.val[1], rgb.val[2], rgb.val[3],
max = 255,
alpha = (100 - 99) * 255 / 100,
names = "blue")
ggplot(data = df3, aes(x = age, y = pop, fill = (as.factor(year)), color=gender,width = 1)) +
geom_bar(data = df3 %>% filter(gender == "F", year != 2011) %>% arrange(rev(year)),
stat = "identity",
position = "identity") +
geom_bar(data = df3 %>% filter(gender == "M", year != 2011) %>% arrange(rev(year)),
stat = "identity",
position = "identity",
mapping = aes(y = -pop)) +
coord_flip() +
scale_y_continuous(labels= abs, limits = (45)*c(-1,1)) +
geom_hline(yintercept = 0) +
scale_fill_economist() +
labs(title = NULL, x = "Věk", y = "Může Podíl obyvatel (v ‰) Ženy",face="bold")+
theme_bw()+
guides(fill=guide_legend(title=NULL))+
scale_fill_manual(values=c(t.col,if ("gender" == "M") {"blue"} else {"pink"}))
不确定我是否做对了。
因为您希望填充颜色同时反映年份和性别,您可以将 year
和 gender
的交互映射到 fill
并为每个组合设置填充颜色通过 scale_fill_manual
.
此外,我稍微简化了您的代码。
library(ggplot2)
library(dplyr)
df4 <- df3 %>%
filter(year != 2011) %>%
mutate(gender_year = interaction(gender, year)) %>%
# Sort data
arrange(year)
ggplot(data = df4, aes(x = age, y = ifelse(gender == "F", pop, -pop), fill = gender_year), width = 1) +
geom_bar(stat = "identity", position = "identity") +
scale_y_continuous(labels= abs, limits = (45)*c(-1,1)) +
coord_flip() +
geom_hline(yintercept = 0) +
labs(title = NULL, x = "Vek", y = "Muze Podil obyvatel (v %) Zeny", fill = NULL) +
theme_bw() +
scale_fill_manual(values = c(F.1991 = "pink", M.1991 = "blue", F.2001 = "red", M.2001 = "red")) +
theme(
axis.title.x = element_text(color = "black", size = 14, face = "bold"),
axis.title.y = element_text(color = "black", size = 14, face = "bold")