2012-01-05 80 views
4

我具有以下数据:我可以使R,使得图表 - 嵌入在饼图条形图

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

+0

如下卡尔答案的一部分,我一直在问我的动机这样做。我知道饼图不适合科学研究,但他们在商务会议中很受欢迎,我需要为商务会议准备这样的图表。此外,饼图可以演示组合(将整个部分分成类 - 这是我的意图)。条形图然后是每个班级内的子组合。 – SHRram 2012-01-05 12:52:48

+1

我也不会推荐制作饼图,更不用说叠加了条形码的饼图。也就是说,我会采取的任何方法将覆盖与其他任何东西将导出为.svg文件,并将它们结合到我Inkscape(真棒免费SVG编辑器)令人愉快。 – 2012-01-07 07:58:55

回答

6

来吧,放开馅饼吧!我建议你只选择馅饼专用解决方案 - 无论如何谁还需要条形图。只需获得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

+0

多吃馅饼总是好事! :) – 2012-01-05 18:44:13

+2

饼图不是邪恶的....一天一馅饼让医生远离!然而,每天两片馅饼可以让医生靠近...所以不要做太多! – jon 2012-01-05 20:22:38

+1

绝对!虽然有时甚至有一个苏格兰馅饼可以让你... – 2012-01-05 22:04:27

10

我不能推荐足够强烈,你读一些爱德华·塔夫特对图表文学和定量数据的显示。饼图接近将信息传递给用户的最糟糕的方式。在图表中使用“3-D”图像(例如条形图)被认为是最好的 - 它不会改善可读性或信息流。

所以,让我问:你想给你的读者什么信息(和什么结论)?你为什么要提交两次相同的信息?

+0

请看我上面的评论,我把它放在那里,以便其他同类问题的人可以问我。事实上,如果你能提出更好的办法,就像我在问题中提到的那样。谢谢你的答案。 – SHRram 2012-01-05 12:54:30

+0

我同意你在科学饼图或三维图表的基础上,但他们有很大的价值,当涉及到业务 - 外观fency!科学家不要让他们的捐赠者高兴吗? – SHRram 2012-01-05 13:06:38

+0

我的确同意部分在卡尔(和爱德华Tufte的愿景图)和Ram的论点。我曾经向我的老板呈现条形图,但我强制制作饼图。我认为R社区讨厌饼图,我看不到我认为卡尔在这里提出的更适合评论而不是回答,这可以阻止那些想要倾听并清楚地询问他人的人 – jon 2012-01-05 13:38:05

8

请给我建议,如果您有任何其他的创新理念来呈现这样的数据

我没有一个创新的想法,但我也有我觉得有什么更好的办法。

想想你的数据。它分为组(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条形图+饼图,问自己:一眼就能看出数据的关键特征是哪一种?

当我们告诉你时,请相信我和本次论坛上的数据可视化专家:重要的是清晰的表达,而不是“业务人员想要什么”。

+2

科学地说,这是正确的答案。但是,如果老板想要一张饼图,那么老板想要一张饼图。美国科学家有时需要摆脱我们的高马。 – 2012-01-05 14:34:24

+2

我希望老板想要的是良好的数据分析。有时你必须告诉人们他们并不真正想要他们想要的东西,因为你有更好的东西。如果这是一个“高马”,那么足够公平:) – neilfws 2012-01-05 14:37:24

+2

我认为堆叠条形图比OP想要的好,但是,我并不喜欢堆叠条形图:)。上面的第二个(蓝色)类别没有共同的基线,因此很难看到该小组中的组之间的发展。 – 2012-01-05 14:40:52

0

你有没有想过使用python/matplotlib?同样自由和好,并且可以选择(a)饼图和(b)在其他图上叠加图,这些图可以做你想做的。

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

或者你可以做一个爆炸饼图来显示子类别:

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

+0

R没有任何饼图是无稽之谈。有多种方式来创建它们。 – 2012-01-05 14:39:19

+0

糟糕我的坏处。编辑。 – 2012-01-05 14:49:08

+0

漂亮的图书馆,感谢分享。 – 2012-01-05 15:01:47

1

我同意一些其他的应答者,一个饼图可能不是绘图本的最佳途径数据类型。我宁愿去为每个子类别划一条线。

“R创建饼图”铅的快速谷歌显示this link as the first hit。它显示了创建饼图的多种选项。类似的谷歌barcharts导致this link

关于图的组合,我会单独创建图并使用绘图程序(如gimp或inkscape)将它们组合在一起。当你不想创建这种类型的地块几十次时,这是特别有效的。

+0

我同意,使用单独的程序进行混搭确实会对您有好处。不是重现性的唯一原因。但它会花费你很大的努力,使你的情节不重叠,把你的标签放在正确的地方,等等。 – alexplanation 2012-01-05 17:36:33

+0

我同意@alexplanation。手工操作需要一些时间,但在R中编程也需要一段时间... – 2012-01-05 18:44:56