【问题标题】:Pie chart based on table in R基于R中表格的饼图
【发布时间】:2014-08-15 15:26:20
【问题描述】:

我想绘制一个饼图来代表 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 中做到这一点?

【问题讨论】:

  • 所以您想打印 12 个切片,每个名称 3 个切片?以适当的顺序创建一个包含 12 行的数据框并绘制图表
  • 它不起作用。我尝试使用 data.frame,值是正数。但是,我有一个问题是“X 值必须为正”。整个 data.frame 是带有 std(df) 的数字,其中 df 是 data.frame
  • 见下面的答案。您需要创建一个“融化”数据框,并使用这些值创建饼图

标签: r pie-chart


【解决方案1】:

您需要重新调整数据以满足您的需求。使用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() 函数将“取消透视”您的数据框。结果将是这样的:

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,因此您无需重新调整值。如果每个名称的总和不同,我留给你如何重新调整值。


参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多