Ric*_*cky 7 r bar-chart ggplot2
我有一个如下所示的数据框:
id month type count
___ _______ ______ ______
1 1 1 10
1 1 2 09
1 1 3 26
1 2 1 60
1 2 2 90
2 2 3 80
2 1 1 10
2 1 2 09
2 1 3 26
2 2 1 60
2 2 2 90
2 2 3 80
3 1 1 10
3 1 2 09
3 1 3 26
3 2 1 60
3 2 2 90
3 2 3 80
Run Code Online (Sandbox Code Playgroud)
所以我试过
ggplot(df,aes(x=id,y=count,fill=month))+geom_bar(stat="identity",position=position_dodge())+geom_text(aes(label=count),size=3)
Run Code Online (Sandbox Code Playgroud)
这给出了一个与我的预期略有不同的情节。感谢任何帮助。
Psi*_*dom 10
假设您想绘制id为 x 轴,并排为月份,并堆叠不同的类型,您可以按月拆分数据框,并为每个月添加一个条形层x,将第二个月的条形移动一个数量,以便它们可以分开:
barwidth = 0.35
month_one <- filter(df, month == 1) %>%
group_by(id) %>% arrange(-type) %>%
mutate(pos = cumsum(count) - count / 2) # calculate the position of the label
month_two <- filter(df, month == 2) %>%
group_by(id) %>% arrange(-type) %>%
mutate(pos = cumsum(count) - count / 2)
ggplot() +
geom_bar(data = month_one,
mapping = aes(x = id, y = count, fill = as.factor(type)),
stat="identity",
position='stack',
width = barwidth) +
geom_text(data = month_one,
aes(x = id, y = pos, label = count )) +
geom_bar(data = filter(df, month==2),
mapping = aes(x = id + barwidth + 0.01, y = count, fill = as.factor(type)),
stat="identity",
position='stack' ,
width = barwidth) +
geom_text(data = month_two,
aes(x = id + barwidth + 0.01, y = pos, label = count )) +
labs(fill = "type")
Run Code Online (Sandbox Code Playgroud)
给出:
dput(df)
structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), month = c(1L, 1L, 1L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L), type = c(1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L), count = c(10L, 9L, 26L, 60L, 90L, 80L, 10L, 9L, 26L, 60L,
90L, 80L, 10L, 9L, 26L, 60L, 90L, 80L)), .Names = c("id", "month",
"type", "count"), class = "data.frame", row.names = c(NA, -18L
))
Run Code Online (Sandbox Code Playgroud)
这个问题可以用以下方法更干净地解决facet_grid:
library(tidyverse)
read_tsv("tmp.tsv", col_types = "ccci") %>%
ggplot(aes(x=month, y=count, fill=type)) + geom_col() + facet_grid(.~id)
Run Code Online (Sandbox Code Playgroud)
请注意,您必须在col_types参数中将前三列指定为“字符”,否则看起来不太好。用一些有意义的东西替换数字代码会更好(例如,将月份变成有序因子“一月”、“二月”而不是 1、2;类型和 id 类似)。
| 归档时间: |
|
| 查看次数: |
9400 次 |
| 最近记录: |