我想绘制一个饼图来代表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中完成这项工作的指导吗?
答案 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,因此您无需重新调整值。如果每个名称的总和不同,我将告诉您如何重新调整值。
<强>参考文献:强>