简单的问题,但我是R的新手,所以它给了我一点惊愕。我试图在R中制作一些饼图来练习我的数据可视化技能。
我有一个如下所示的数据框:
carrier n_cancelled n_early n_ontime n_late
<chr> <int> <int> <int> <int>
1 9E 1044 54 12891 4471
2 AA 636 16 26965 5112
3 AS 2 12 606 94
4 B6 466 155 41661 12353
5 DL 349 36 39931 7794
6 EV 2817 66 35646 15644
7 F9 3 1 489 192
8 FL 73 16 2321 850
9 HA 0 1 317 24
10 MQ 1234 53 19790 5320
11 OO 3 0 23 6
12 UA 686 22 45762 12195
13 US 663 9 17444 2420
14 VX 31 7 4231 893
15 WN 192 0 8833 3250
16 YV 56 2 387 156
我正在寻找的是每个运营商下面的一些饼图,如下所示。
现在我的代码看起来像这样......
status <- c("Cancelled", "Early", "On-Time", "Late")
ggplot(counts_by_carrier, aes(x = factor(1), y = c(n_cancelled, n_early, n_ontime, n_late), fill = status)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start = 0) +
blank_theme +
facet_grid(facets=. ~ carrier)
但它会返回Error: Aesthetics must be either length 1 or the same as the data (16): x, y, fill
这是错误的。我将它作为Y值输入所有值n_cancelled等的矢量,并且它不知道如何处理单个饼图。
但我如何解决它目前超出了我的范围。如何强制它一次只查看一行并为每一行打印不同的一行?
答案 0 :(得分:0)
请尝试以人们可以使用的格式发布您的数据,例如:
df <- read.table(
text =
" carrier n_cancelled n_early n_ontime n_late
1 9E 1044 54 12891 4471
2 AA 636 16 26965 5112
3 AS 2 12 606 94
4 B6 466 155 41661 12353
5 DL 349 36 39931 7794
6 EV 2817 66 35646 15644
7 F9 3 1 489 192
8 FL 73 16 2321 850
9 HA 0 1 317 24
10 MQ 1234 53 19790 5320
11 OO 3 0 23 6
12 UA 686 22 45762 12195
13 US 663 9 17444 2420
14 VX 31 7 4231 893
15 WN 192 0 8833 3250
16 YV 56 2 387 156"
)
正如@docendo评论的那样,您需要将数据转换为&#34; long&#34;格式,例如,使用dplyr
/ tidyr
:
df %>%
gather("Outcome", "Count", - carrier)
现在只有三列 - 列标题将成为&#34;结果&#34;中的条目,值将成为计数,如下所示:
carrier Outcome Count
1 9E n_cancelled 1044
2 AA n_cancelled 636
3 AS n_cancelled 2
4 B6 n_cancelled 466
5 DL n_cancelled 349
6 EV n_cancelled 2817
然后,您可以将该信息传递给ggplot以制作您想要的情节(请注意,我正在删除每个组中的前导&#34; n _&#34;)
df %>%
gather("Outcome", "Count", - carrier) %>%
mutate(Outcome = gsub("^n_","", Outcome)) %>%
ggplot(aes(fill = Outcome
, y = Count
, x = 1)) +
geom_bar(stat = "identity"
, position = "dodge") +
facet_wrap(~carrier
, scales = "free_y") +
xlab("")
我会不将它变成饼图(尽管你很可能很容易转换成它)。它们几乎不是一个好主意,如果您的目标是改善数据可视化,我强烈建议您不要使用饼图。