【发布时间】:2020-10-16 05:03:31
【问题描述】:
我正在尝试制作以下数据的 ggplot,其中包含有关人员(由 id 表示)何时(日期和时间)将其数据同步到服务器的信息。为简单起见,我删除了日期变量。
district id year_sync time_sync
A 1 2020 12:03:19
A 2 2020 14:33:23
A 3 2020 13:14:30
A 4 2020 12:37:07
A 5 2020 12:45:48
A 6 2020 02:26:57
A 7 2020 08:10:03
A 8 2020 12:08:15
A 9 2020 15:21:52
A 10 2020 17:42:33
A 11 2020 14:23:29
A 12 2020 23:18:19
A 13 2020 12:39:14
A 14 2020 11:31:33
A 15 2020 13:00:14
A 16
A 17
A 18
A 19
A 20
A 21
B 22
B 23
B 24
B 25
B 26
B 27
B 28
B 29
B 30
B 31 2019 12:39:31
B 32 2019 11:44:39
B 33 2019 10:18:20
B 34 2019 18:11:48
B 35 2019 17:22:32
B 36 2019 12:17:23
B 37 2019 12:58:30
B 38 2019 18:50:29
B 39 2019 12:58:52
B 40 2019 21:12:36
B 41 2019 15:57:53
B 42 2019 12:52:44
B 43 2019 14:10:48
B 44 2019 15:40:08
B 45 2019 14:34:07
B 46 2019 02:40:28
B 47 2019 01:37:05
B 48 2019 14:36:01
B 49 2019 11:19:45
B 50 2019 15:33:42
B 51 2019 21:00:49
A 52 2020 15:02:01
A 53 2020 20:28:23
A 54 2020 17:02:37
A 55 2020 15:01:24
A 56 2020 11:29:02
A 57 2020 18:31:05
A 58 2020 12:07:51
A 59 2020 13:00:11
A 60 2020 09:35:08
A 61 2020 18:25:53
B 62 2020 18:12:51
B 63 2020 14:26:31
B 64 2020 14:46:51
B 65 2020 18:04:50
B 66 2020 07:08:21
B 67 2020 14:37:16
B 68 2020 11:56:24
B 69 2020 13:19:34
B 70 2019 15:34:24
B 71 2019 15:02:03
B 72 2019 11:05:08
B 73 2019 16:11:18
A 74 2019 23:51:36
A 75 2019 13:30:46
A 76 2019 12:28:43
A 77 2019 12:38:56
A 78 2019 11:22:05
A 79 2019 15:03:20
A 80 2019 11:27:34
-
我想绘制一个年度比较图,即2020年v/s 2019年有多少ID同步数据。为此我使用了以下代码:
df1 <- df %>% group_by(year_sync) %>% dplyr::summarize(non_na_count = sum(!is.na(year_sync))) %>% ## I only want to calculate % based on non-missing values setNames(., c('year', 'count')) %>% mutate('share' = count/sum(count), label = paste0(round(share*100, 2), '%')) ggplot(df1, aes(y=count, x=year)) + geom_bar(stat='identity', #color = "black" #fill = c("aquamarine4", "bisque3"), position = "dodge") + geom_text(aes(label = label), position = position_stack(vjust = 1.05), size = 3) + xlab ("Year") + ylab ("Number of People") + theme_minimal() + theme(plot.title = element_text(hjust = 0.5, face = "bold"), plot.subtitle = element_text(hjust = 0.5, face = "italic"))
这不太好用,因为我的 x 轴为 2018.0 2018.5 等(如下)。我希望 x 轴只有 2019 和 2020。
我需要以下方面的帮助: 1.1 修复我的 x 轴 (地址)
1.2区域网格,其中比例(用于标签)是根据每个区域内的总观察值计算的。 (待定)
1.3 Fix Fill - 我想要不同颜色的条。但是,不知何故,填充目前无法正常工作。(ADDRESSED)
- 我还想绘制时间分布,以便 time_sync 了解人们通常何时同步他们的数据。但是,我无法这样做。 (地址)
编辑 对于第 1.2 点:我正在尝试以下代码:
df2 <-
df %>% dplyr::filter(!is.na(year_sync)) ## filtering NAs
df3 <- df2 %>%
group_by(district) %>%
dplyr::mutate(ssum = n()) %>%
dplyr::count(year_sync, ssum) %>%
mutate(percent = n / ssum,
label = paste0(round(percent*100, 2), '%')) ## to calculate % based on total number of IDs in each district
绘图
ggplot(df3, aes(y=ssum, x=factor(year), fill=district)) +
geom_bar(stat='identity',
#color='black',
position = position_dodge(width=0.8), width=0.8) +
geom_text(aes(label = label, y=count+10),
position = position_dodge(width=0.8),
size = 3) +
xlab ("Year") +
ylab ("Number of People") +
scale_fill_manual(values=c("aquamarine4", "bisque3")) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, face = "italic"))
但是,我收到以下错误:unique.default(x, nmax = nmax) 中的错误:unique() 仅适用于向量。谁能告诉我怎么了?
谢谢!
【问题讨论】:
-
for 1. 用
x=factor(year)替换x=year,for 2. 添加+ facet_grid(factor(district)~.)for 3. 你需要一个保存颜色的新列 -
谢谢,Yingw!我会试试你的建议。但是,您能否通过新的颜色列来澄清您的意思?如果您能详细说明为什么当前的颜色代码不起作用/出了什么问题,将会很有帮助。
标签: r ggplot2 bar-chart histogram