0

我在 r 中没有经常使用饼图,有没有办法制作饼图并且只显示前 10 个名称的百分比?

例如,这是我的数据的简单版本:

> data
   count    METRIC_ID
1      8           71
2      2         1035
3      5         1219
4      4         1277
5      1         1322
6      3         1444
7      5         1462
8     17         1720
9      6         2019
10     2         2040
11     1         2413
12    11         2489
13    24         2610
14    29         2737
15     1         2907
16     1         2930
17     2         2992
18     1         2994
19     2         3020
20     4         3045
21    35         3222
22     2         3245
23     5         3306
24     2         3348
25     2         3355
26     2         3381
27     3         3383
28     4         3389
29     6         3404
30     1         3443
31    22         3465
32     3         3558
33    15         3600
34     3         3730
35     6         3750
36     1         3863
37     1         3908
38     5         3913
39     3         3968
40     9         3972
41     2         3978
42     5         4077
43     4         4086
44     3         4124
45     2         4165
46     3         4205
47     8         4206
48     4         4210
49    12         4222
50     4         4228

我想查看每个 METRIC_ID 的分布计数:

pie(data$count, data$METRIC_ID)

但是这个图表标记了图表上的每一个 METRIC_ID,当我有超过 100 个 METRIC_ID 时,它看起来就像一团糟。如何仅在图表上标记前 n(例如,n=5)METRIC_ID,并仅显示该 n METRIC_ID 的计数?

谢谢您的帮助!!!

4

3 回答 3

3

只需在创建饼图之前对您的数据进行子集化。我会做类似的事情:

  1. 使用 对数据集进行排序order
  2. 选择前十行​​。
  3. 从结果数据创建饼图。

饼图不是可视化数据的最佳方式,只是谷歌pie chart problems,例如这个链接。我会选择类似的东西:

library(ggplot2)
dat = dat[order(-dat$count),]
dat = within(dat, {METRIC_ID = factor(METRIC_ID, levels = METRIC_ID)})
ggplot(dat, aes(x = METRIC_ID, y = count)) + geom_point()

在此处输入图像描述

在这里,我只是绘制了所有数据,我认为这仍然会导致一个可读的图表。该图更正式地称为点图,并在克利夫兰的图形书中大量使用。在这里,高度与 相关联count,这更容易解释count为与圆面积的分数相关联,如饼图的情况。

于 2013-04-26T13:56:52.630 回答
3

要禁止绘制某些标签,请将它们设置为NA. 尝试这个:

labls <- data$METRIC_ID
labls[data$count <  3] <- NA
pie(data$count, paste(labls))
于 2013-04-26T14:09:48.277 回答
2

为您的数据找到更好的图表类型。

以下是创建所需图表的可能性:

data2 <- data[data$count %in% tail(sort(data$count),5),]
pie(data2$count, data2$METRIC_ID)

在此处输入图像描述

稍微好一些:

data3 <- data2
data3$METRIC_ID <- as.character(data3$METRIC_ID)
data3 <- rbind(data3,data.frame(count=sum(data[! data$count %in% tail(sort(data$count),5),"count"]),METRIC_ID="others"))
pie(data3$count, data3$METRIC_ID)

在此处输入图像描述

于 2013-04-26T14:05:20.887 回答