gpt4 book ai didi

r - ggplot 中的 geom_text 与 geom_col 和位置 "dodge"

转载 作者:行者123 更新时间:2023-12-05 09:13:36 25 4
gpt4 key购买 nike

我的标签有问题。我已经阅读了有关该主题的其他帖子,但无法弄清楚出了什么问题。你能帮忙吗?

数据:

df <- structure(list(type = c("Activity (ACTIV)", "Activity (ACTIV)", 
"Activity (ACTIV)", "Function (MEREC)", "Meeting (MEONE)", "Meeting (MEONE)",
"Meeting (MEONE)", "Training (TRAIN)", "Training (TRAIN)", "Training (TRAIN)"
), month = structure(c(1546300800, 1548979200, 1551398400, 1551398400,
1546300800, 1548979200, 1551398400, 1546300800, 1548979200, 1551398400
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), attendance = c(70,
258, 125, 150, 2, 71, 180, 80, 105, 32)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), vars = "type", drop = TRUE, indices = list(
0:2, 3L, 4:6, 7:9), group_sizes = c(3L, 1L, 3L, 3L), biggest_group_size = 3L, labels = structure(list(
type = c("Activity (ACTIV)", "Function (MEREC)", "Meeting (MEONE)",
"Training (TRAIN)")), class = "data.frame", row.names = c(NA,
-4L), vars = "type", drop = TRUE))

这是什么:

[![# A tibble: 10 x 3
# Groups: type \[4\]
type month attendance
<chr> <dttm> <dbl>
1 Activity (ACTIV) 2019-01-01 00:00:00 70
2 Activity (ACTIV) 2019-02-01 00:00:00 258
3 Activity (ACTIV) 2019-03-01 00:00:00 125
4 Function (MEREC) 2019-03-01 00:00:00 150
5 Meeting (MEONE) 2019-01-01 00:00:00 2
6 Meeting (MEONE) 2019-02-01 00:00:00 71
7 Meeting (MEONE) 2019-03-01 00:00:00 180
8 Training (TRAIN) 2019-01-01 00:00:00 80
9 Training (TRAIN) 2019-02-01 00:00:00 105
10 Training (TRAIN) 2019-03-01 00:00:00 32

图表:

ggplot(df, aes(month, attendance, fill = type)) + 
geom_col(position = "dodge") +
geom_text(aes(label = attendance), position = position_dodge(width =-1), vjust=1)

我明白了,但我希望文本位于相关的闪避列上方,而不是全部位于中间。你能帮忙吗?

image

最佳答案

我认为问题在于您的 x 美学是约会对象。解决这个问题的一些方法是使用 x = as.factor(month) 然后手动设置比例标签:

ggplot(df, aes(x = as.factor(month), y = attendance, fill = type, label = attendance)) + 
geom_col(position = "dodge") +
geom_text(position = position_dodge(width = 0.9), vjust = -0.5) +
scale_x_discrete(labels = function(x) format(as.Date(x), "%b"))

plot1

或者,您可能想改用构面:

ggplot(df, aes(x = type, y = attendance, fill = type, label = attendance)) +
geom_col() +
geom_text(vjust = -0.5, size = 3) +
facet_wrap(~ month) +
theme(
axis.text.x = element_text(angle = 60, hjust = 1, size = 6)
)

plot2

最后,这是个人意见,但如果确实需要对“时间”进行比较,我会主张使用折线图。像这样的东西:

ggplot(df, aes(x = month, y = attendance, color = type, label = attendance)) +
geom_line() +
geom_point(size = 2.5, fill = "white", shape = 21, stroke = 1, show.legend = FALSE) +
scale_x_datetime(date_breaks = "1 month", date_labels = "%b")

plot3

关于r - ggplot 中的 geom_text 与 geom_col 和位置 "dodge",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com