2015-04-06 67 views
2

我有一个分配的频率从一个Java程序的输出作为csv文件,具有以下格式:剧情饼图和,使用R从频率表直方图计数

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

我是相当新的R,我想输入它到一个表并投射它作为一个饼图和/或直方图具有与标签和%的视觉表示可能的话,类似于以下图像..

http://i.stack.imgur.com/qHNss.png

我从搜索和阅读中知道它会成为某种东西翁行,

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

我知道table(myfile)给出了频率分布,但它计数频率,而不是使用它作为是的。

+0

你是说,你要使用的数据 '是' 是从'.csv'文件导入?如果是这样,你可以使用'myfile'变量,因为它应该已经在'read.csv()'函数之后存储为'table'。 – tospig

+1

考虑使用barplot来代替'barplot(myfile [,2],names = myfile [,1]);馅饼(myfile [,2],labels = myfile [,1])'也[此相关问题](http://stackoverflow.com/questions/28909843/include-values-to-the-barplot-and-pie- charts-in-r)可能会有所帮助 – rawr

回答

2
  • 按照您的示例输入文件进行加载时,您需要指定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); 

pie

+0

谢谢,除了一件事情之外,它发挥出色。我不确定你是如何使用pch块的。但我相信一个快速搜索将解决这个问题。谢谢。 – Ankit

+0

@Ankit,我实际上只是抓住了一个Unicode字符,U + 25A0,它是一种随机的。基本上只是通过http://www.alanflavell.org.uk/unicode/unidata25.html浏览,直到我找到一个我认为是您的截图的最佳匹配。 – bgoldst