2013-04-26 1 views
0

Я не использовал графический граф много в r, есть ли способ сделать круговую диаграмму и показывать только 10 лучших имен?Как сделать круговую диаграмму только имя top n производительность

Например, вот простая версия моих данных:

> 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?

Благодарим за помощь!

ответ

3

Для подавления прорисовки некоторых меток, установите их до NA. Попробуйте следующее:

labls <- data$METRIC_ID 
labls[data$count < 3] <- NA 
pie(data$count, paste(labls)) 
+0

Я попытался установить их в "", и он отлично решает мою проблему! Благодаря!! – linp

3

Просто подставьте свои данные перед созданием пьедестала. Я бы сделал что-то вроде:

  1. Сортировка наборов данных с использованием order.
  2. Выберите первые десять строк.
  3. Создайте круговую диаграмму из полученных данных.

Круговые диаграммы - это не лучший способ визуализации ваших данных, просто Google pie chart problems, например. this link. Я бы что-то вроде:

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() 

enter image description here

Здесь я просто построить все данные, которые я думаю, до сих пор приводит к читаемому графику. Этот график более формально известен как точка-точка и широко используется в graphics book of Cleveland. Здесь высота связана с count, что намного проще интерпретировать, что связывание count с долей площади круга, как в случае с пиротехникой.

+0

Спасибо за быстрый ответ @Paul Hiemstra! Я подумал об этом, но моя цель состояла в том, чтобы показать моему клиенту, что проблема неравномерно распределена по всем METRIC_ID ... поэтому я искал график, чтобы показать им, что все METRIC_ID были в основном равномерно нарезаны --- я думал о круге , Для меня важно показать им ВСЕ распределение METRIC_IDs, и мне нужно выбрать METRIC_ID, которые показывают наибольшее количество проблем и сделать их визуализированными для клиента ... для моей цели анализа мне это не нужно ... но мне нужно красивый график, чтобы показать ...любая идея, что я мог бы удовлетворить все эти условия? Благодаря!! – linp

+0

Я отредактировал свой ответ, чтобы включить то, что я буду делать. –

+1

Улучшен график, упорядоченный по 'count', поменял местами оси x и y. –

2

Найти лучший тип диаграммы для ваших данных.

Вот возможность создания диаграммы вы хотите:

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

enter image description here

Немного лучше:

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) 

enter image description here

+0

Спасибо @Roland! Я думаю, что приятно сблизить остальных в одной части! – linp

Смежные вопросы