我正在尝试在kaggle上复制以下最初由python制成的图表:
这是我正在使用的df:chart_longer_df
age gender gender_count
<chr> <chr> <dbl>
1-17 Men 45
1-17 Women 17
18-25 Men 50
18-25 Women 20
26-35 Men 55
26-35 Women 22
36-45 Men 35
36-45 Women 12
46-60 Men 20
46-60 Women 5
61-80 Men 10
61-80 Women 2
80-100 Men 8
80-100 Women 0
要创建该图表,请在以下代码中创建:
chart_longer_df %>%
# making Women gender to negative values to stack gender around 0
mutate(gender_count2 = case_when(gender == "Women" ~ gender_count * -1,
TRUE ~ gender_count)) %>%
ggplot(aes(x = as.factor(age), y = gender_count2, fill = gender)) +
geom_col(width = 0.52) +
theme_classic() +
geom_text(aes(label = gender_count), col = "black", nudge_y = 2, size = 5) +
scale_fill_manual(values = c("darkblue","maroon")) +
labs(title = "Age / gender distribution" ) +
theme(plot.title = element_text(size = 25),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
axis.text = element_text(size = 15),
axis.line = element_blank()
)
问题:我曾尝试根据条件将标签的位置调整到条形之外,但出现错误。 if positive value then nudge_y = 2 else -2
chart_longer_df %>%
mutate(gender_count2 = case_when(gender == "Women" ~ gender_count * -1,
TRUE ~ gender_count)) %>%
ggplot(aes(x = as.factor(age), y = gender_count2, fill = gender)) +
geom_col(width = 0.52) +
theme_classic() +
geom_text(aes(label = gender_count), col = "black", size = 5,
# Added this condition here neither working as gender_count2 nor with.$
nudge_y = case_when(.$gender_count2 > 0 ~ 2,
TRUE ~ -2) ) +
scale_fill_manual(values = c("darkblue","maroon")) +
labs(title = "Age / gender distribution" ) +
theme(plot.title = element_text(size = 25),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
axis.text = element_text(size = 15),
axis.line = element_blank()
)
也尝试通过将条件更改为gender == "Women"
但那也不起作用,似乎是一个愚蠢的错误,但无法弄清楚。
chart_longer_df %>%
mutate(gender_count2 = case_when(gender == "Women" ~ gender_count * -1,
TRUE ~ gender_count)) %>%
ggplot(aes(x = as.factor(age), y = gender_count2, fill = gender)) +
geom_col(width = 0.52) +
theme_classic() +
geom_text(aes(label = gender_count), col = "black", size = 5,
nudge_y = case_when(.$gender == "Women" ~ 2,
TRUE ~ -2) ) +
scale_fill_manual(values = c("darkblue","maroon")) +
labs(title = "Age / gender distribution" ) +
theme(plot.title = element_text(size = 25),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
axis.text = element_text(size = 15),
axis.line = element_blank()
)
错误:
Error in eval_tidy(pair$lhs, env = default_env): object '.' not found
Traceback:
1. geom_text(aes(label = gender_count), col = "black", size = 5,
. nudge_y = case_when(.$gender == "Women" ~ 2, TRUE ~ -2))
2. position_nudge(nudge_x, nudge_y)
3. ggproto(NULL, PositionNudge, x = x, y = y)
4. case_when(.$gender == "Women" ~ 2, TRUE ~ -2)
5. eval_tidy(pair$lhs, env = default_env)
代替使用的nudge_y
,改变y
在轴值aes
的geom_text
:
library(dplyr)
library(ggplot2)
chart_longer_df %>%
mutate(gender_count2 = case_when(gender == "Women" ~ gender_count * -1,
TRUE ~ as.numeric(gender_count))) %>%
ggplot(aes(x = as.factor(age), y = gender_count2, fill = gender)) +
geom_col(width = 0.52) +
theme_classic() +
geom_text(aes(label = gender_count,y = gender_count2 +sign(gender_count2) * 3),
col = "black", size = 5) +
scale_fill_manual(values = c("darkblue","maroon")) +
labs(title = "Age / gender distribution" ) +
theme(plot.title = element_text(size = 25),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
axis.text = element_text(size = 15),
axis.line = element_blank()
)
在最终确定要乘以3之前,在y轴值上进行了一些操作。
感谢@Ronak Shah,您可以解决所有问题。看到您也有YouTube频道。继续发布新的学习视频,由于我有很多可以向您学习的内容,因此我将开始关注!