我可以在饼图中嵌入的R - 条形图中制作这样的图形

时间:2012-01-05 12:38:56

标签: r graph ggplot2 pie-chart

我有以下数据:

    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 个答案:

答案 0 :(得分:10)

我不能强烈推荐您阅读Edward Tufte关于图表和定量数据显示的一些文献。饼图接近向用户传递信息的最差方式。在图表中使用“3-D”图像(例如条形图)至多被视为幼稚 - 它不会改善可读性或信息流。

那么让我问一下:你想给读者什么信息(和什么结论)?为什么要两次提供相同的信息?

答案 1 :(得分: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 :(得分:7)

来吧,让我们去吃馅饼!我建议你只选择仅限馅饼的解决方案 - 无论如何都需要条形图。只需获得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

答案 3 :(得分:1)

我同意其他一些回答者的观点,即饼图可能不是绘制此类数据的最佳方式。我更倾向于为每个子类别选择一条线条。

快速google for&#34; R创建饼图&#34;铅显示this link as the first hit。它显示了创建饼图的众多选项。一个类似谷歌的条形图导致this link

关于组合图,我单独创建图并使用绘图程序(如gimp或inkscape)将它们组合在一起。当您不想创建数十次这样的图时,这尤其有效。

答案 4 :(得分:0)

你有没有想过使用python / matplotlib?同样免费且良好,并且可以选择(a)饼图和(b)在其他图表上叠加图表,这可能会做你想要的。

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

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

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