【问题标题】:How to plot a mosaic plot from pre-calculated count data?如何根据预先计算的计数数据绘制马赛克图?
【发布时间】:2013-12-13 08:27:04
【问题描述】:

我想从下面的数据文件中创建一个简单的马赛克图:

Country|Name|Count
US|Sam|10
US|John|30
UK|Sam|30
UK|John|2
CA|Sam|23
CA|Bill|45

我希望得到一个马赛克图,其中 x 轴上的第一列和每个类别“名称”的高度为“计数”的堆叠矩形。

我试过了:

data<-read.table("my_table.txt", header=T, sep="|")
mosaicplot(data)

但它会创建一个包含太多列和行的怪物。

我的问题是如何提及“计数”变量的值应该是 y 值? 我在制作马赛克之前尝试使用ftable(graph),但即使是桌子也没有很好地排列。

【问题讨论】:

  • 根据您的标题回答:导入已正确完成,使用 str(data) 您可以看到:'data.frame': 6 obs。 3 个变量:$ 国家:因子 w/ 3 个级别“CA”、“UK”、“US”:3 3 2 2 1 1 $ 名称:因子 w/3 个级别“Bill”、“John”、..:3 2 3 2 3 1 $ Count : int 10 30 30 2 23 45 我建议更改您的标题以匹配您关于马赛克图的问题
  • 谢谢!我得到了马赛克图的原理,只是没有将“计数”定义为y变量的方式。
  • 虽然我想没有直接的方法来做马赛克,但我认为相当于定义数据的 ggplot 应该是这样的:ggplot(data=data, aes(x=Name, y=Count, group=Country)

标签: r import plot


【解决方案1】:

一种可能性是使用rep“分解”您预先计算的数据。

country <- with(df, rep(x = Country, times = Count))
name <- with(df, rep(x = Name, times = Count))

df2 <- data.frame(country, name)
mosaicplot(country ~ name, data = df2)

【讨论】:

  • 感谢 Henrik,这正是我想要的!
  • 很高兴听到它以您想要的方式工作!干杯。
【解决方案2】:

我可以建议vcd 库中的spine 函数吗:

# require(vcd)
dt <- xtabs(Count~Name+Country, data=data)
spine(dt)

?spine "脊柱图是马赛克图的一种特殊情况,可以看作是堆叠(或突出显示)条形图的概括。类似地,脊柱图是直方图的扩展。"

spineplot 函数也可以在基础图形中使用。

【讨论】:

  • 谢谢 TWL!虽然轴是倒置的(我猜只需要在stabs中改变它们的顺序),但这个功能非常方便。
  • @lqdo2000,不客气,确实,尝试xtabs(Count~Country+Name, data=data) 更改顺序。
猜你喜欢
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多