можно сделать такой график в R - гистограмму, встроенную в круговую диаграмму - PullRequest
4 голосов
/ 05 января 2012

У меня есть следующие данные:

    I   II  Total 
A   15  25  40
B   5   45  50
C   15  5   20

Ввод данных R:

group <- c("A", "B", "C", "A", "B", "C")
subgroup <- c("I", "I", "I", "II", "II", "II")
yvar <- c(15, 5, 15, 25, 45, 5)

Когда я думал, как лучше представить это, я пришел к идее круговой диаграммы (желательно3D) в сочетании с гистограммой (желательно 3D).Вот мой набросок моей идеи, где гистограмма встроена в круговую диаграмму.Пожалуйста, предложите мне, если у вас есть какие-либо другие инновационные идеи для представления таких данных.

enter image description here enter image description here

Ответы [ 5 ]

10 голосов
/ 05 января 2012

Я не могу порекомендовать вам прочитать литературу Эдварда Туфте о графиках и отображении количественных данных.Круговые диаграммы близки к худшему из возможных способов передачи информации пользователю.Использование «трехмерных» изображений (например, столбцов) в диаграммах в лучшем случае считается детским - это никак не влияет на улучшение читаемости или потока информации.

Итак, позвольте мне спросить: какую информацию (и какие выводы) вы пытаетесь дать своему читателю?Почему вы хотите предоставить одну и ту же информацию дважды?

8 голосов
/ 05 января 2012

Пожалуйста, предложите мне, если у вас есть другая инновационная идея представить такие данные

У меня нет инновационной идеи, но у меня есть то, что я считаю лучшим способом.

Подумайте о своих данных. Он делится на группы (A, B, C), каждая из которых также имеет подгруппу (I, II). Поэтому, когда вы наносите данные на график, вам нужны 2 «наглядных пособия»: одна из них иллюстрирует основные группы, а вторая - подгруппы.

Разумный способ сделать это - разделить основные группы по позициям и указать подгруппы по цвету.

Итак, вы можете преобразовать свои данные в фрейм данных (df1), который выглядит следующим образом:

  group subgroup yvar
1     A        I   15
2     B        I    5
3     C        I   15
4     A       II   25
5     B       II   45
6     C       II    5

А затем с помощью ggplot создайте столбчатую диаграмму с накоплением:

library(ggplot)
ggplot(df1, aes(x = group, y = yvar, fill = subgroup)) + geom_bar()

Результат:

enter image description here

Обратите внимание, что ggplot вычисляет итоги за вас. Посмотрите на это, посмотрите на свои комбинированные 3D гистограммы и круговые диаграммы и спросите себя: какой из них лучше всего передает ключевые характеристики данных, с первого взгляда?

Пожалуйста, поверьте мне и экспертам по визуализации данных на этом форуме, когда мы говорим вам: важна четкая презентация, а не "то, что хотят деловые люди".

7 голосов
/ 05 января 2012

Давай, давай сумасшедшие с пирогами!Я предлагаю вам просто пойти на решение только для пирога - кому все равно нужны гистограммы.Просто получите пакет plotrix .Вот как бы я отображал матрицу из 6 чисел в виде круговых диаграмм.

plot(1:5,type="n",main="Pie charts are evil",xlab="",ylab="",axes=FALSE)#empty plot
require(plotrix)
main_col <- c("#ff0000","#80ff00","#00ffff")#nice colors
main_pie <- floating.pie(3,3,c(40,50,20), col=main_col,radius=1)#your big pie
#here are your small pies with labels using plotrix functions
small_col <- c("black","white")
small_lab <- c("I","II")
A <- floating.pie(3.8,4.5,c(15,5), col=small_col,radius=0.2)
pie.labels(3.8,4.5,A,small_lab,border=F,radius=0.3,cex=0.8)
B <- floating.pie(1.7,2,c(15,25), col=small_col,radius=0.2)
pie.labels(1.7,2,B,small_lab,border=F,radius=0.3,cex=0.8)
C <- floating.pie(4.3,2,c(5,45), col=small_col,radius=0.2)
pie.labels(4.3,2,C,small_lab,border=F,radius=0.3,cex=0.8)
#and finally very useful legend
legend("right",legend=c("A","B","C"),col=main_col,bty="n",pch=15)

enter image description here

1 голос
/ 05 января 2012

Я согласен с некоторыми другими ответчиками, что круговая диаграмма может быть не лучшим способом построения графиков для такого рода данных. Я бы предпочел пойти на линейный сюжет с линией для каждой из подкатегорий.

Быстрый гугл по запросу "R create pie chart" показал эту ссылку как первый хит . Он показывает множество вариантов создания круговых диаграмм. Подобный гугл для гистограмм приводит к этой ссылке .

Что касается объединения графиков, я бы отдельно создавал графики и комбинировал их, используя программу для рисования, такую ​​как gimp или inkscape. Это особенно эффективно, когда вы не хотите создавать такие графики десятки раз.

0 голосов
/ 05 января 2012

Думали ли вы об использовании python / matplotlib?Одинаково бесплатен и хорош, и имеет опции для (а) круговой диаграммы и (б) наложения графиков на другие графики, которые могут делать то, что вы хотите.

http://matplotlib.sourceforge.net/gallery.html

Или вы можете сделатьразвернутая круговая диаграмма для отображения подкатегорий:

http://matplotlib.sourceforge.net/examples/pylab_examples/pie_demo.html

...