【问题标题】:Plot pie chart and histogram using R from table with frequency count使用带有频率计数的表中的 R 绘制饼图和直方图
【发布时间】:2015-06-11 11:00:30
【问题描述】:

我有一个分布频率作为 java 程序的输出作为 csv 文件,格式如下:

push 210
mov 270
jmp 150
cp 190
..so on

我对 R 很陌生,我想将其输入到表格中并将其投影为饼图和/或直方图,以便具有带有标签和 % 可能的视觉表示,类似于下图..

我从搜索和阅读中知道这将是大势所趋,

myfile <- read.csv("sample.csv", sep="/t");
myfreq <- table(myfile);
pie(myfreq);
hist(myfreq);

我知道table(myfile) 给出了频率分布,但它计算频率而不是按原样使用它。

【问题讨论】:

  • 您是说要使用从.csv 文件导入的“原样”数据吗?如果是这样,您可以只使用myfile 变量,因为它应该已经在read.csv() 函数之后存储为“表”。
  • 考虑使用条形图代替barplot(myfile[, 2], names = myfile[, 1]); pie(myfile[, 2], labels = myfile[, 1])this related question 可能会有所帮助

标签: r plot histogram pie-chart frequency


【解决方案1】:
  • 按照您的示例输入文件,在加载时,您需要指定header=F,因为没有标题。
  • 加载时,需要sep='\t' 使用制表符分隔符。
  • table() 确实会计算频率,但是由于您的输入数据已经有频率,因此无需在此处调用它。
  • 您可以用百分比标记切片,但您必须自己计算它们并将labels 参数的值传递给pie()

dat <- read.csv('sample.csv', sep='\t', header=F, col.names=c('inst','freq') );
dat;
##   inst freq
## 1 push  210
## 2  mov  270
## 3  jmp  150
## 4   cp  190
cols <- rainbow(nrow(dat));
pie(dat$freq,labels=paste0(round(dat$freq/sum(dat$freq)*100,2),'%'),col=cols);
legend('bottom',legend=dat$inst,pch='■',ncol=nrow(dat),bty='n',col=cols);

【讨论】:

  • 谢谢,除了一件事,它做得很好。我不确定你是如何使用 pch 块的。但我相信快速搜索会解决这个问题。谢谢。
  • @Ankit,我实际上只是抓住了一个 Unicode 字符,U+25A0,它有点随机。基本上只是浏览了alanflavell.org.uk/unicode/unidata25.html,直到我找到了一个我认为最适合你的截图的。
最近更新 更多