饼图基于R中的表格

时间:2014-08-15 15:26:21

标签: r pie-chart

我想绘制一个饼图来代表4个人,每个人有3个不同的值。

Name           X            Y                Z
Bill          120         280               600
John          140         360               500 
Johana        150         700               150
Tim           200         600               200

我想要做的是将一个饼图分成4个相等的区域(Bill,John,Johana,Tim),并按照每个区域,根据X的值进行分割, Y,Z。我试图根据表格绘制R中的值,但遗憾的是它不起作用。任何人都可以给我一个如何在R中完成这项工作的指导吗?

1 个答案:

答案 0 :(得分:3)

您需要重塑一下您的数据以满足您的需求。使用reshape包创建一个"融化的"数据框:

df <- data.frame(
  name=c('Bill','John','Johana','Tim'),
  x = c(120,140,150,200),
  y = c(280,360,700,600),
  z = c(600,500,150,200)
)

library(reshape)
df2 <- sort_df(
         melt(df, id='name')
         , vars=c('name','variable')
       )
pie(df2$value) # ONLY take the value column to create the chart.

我留给你定义切片颜色和标签。


解释:

melt()功能将&#34; unpivot&#34;你的数据框架。结果将是这样的:

library(reshape)
melt(df, id='name')
     name variable value
1    Bill        x   120
2    John        x   140
3  Johana        x   150
4     Tim        x   200
5    Bill        y   280
6    John        y   360
7  Johana        y   700
8     Tim        y   600
9    Bill        z   600
10   John        z   500
11 Johana        z   150
12    Tim        z   200

sort_df()函数只是按名称和变量对条目进行排序:

sort_df(melt(df, id='name'), vars=c('name','variable'))
     name variable value
1    Bill        x   120
5    Bill        y   280
9    Bill        z   600
3  Johana        x   150
7  Johana        y   700
11 Johana        z   150
2    John        x   140
6    John        y   360
10   John        z   500
4     Tim        x   200
8     Tim        y   600
12    Tim        z   200

剩下的就是策划馅饼。由于所有名称的每个名称的值总和为1000,因此您无需重新调整值。如果每个名称的总和不同,我将告诉您如何重新调整值。


  

<强>参考文献: