有没有办法将词根和叶子图输出到图形设备,例如window()
/ quartz()
?在R:?stem中,在图形包中,以及?stem.leaf,在aplpack包中至少有两种获取茎和叶图的方法。两者都输出文本到控制台。例如:
> set.seed(1)
> stem(rbinom(10, size=10, prob=.5))
The decimal point is at the |
3 | 0
4 | 000
5 | 0
6 | 00
7 | 000
如果可以方便地将其输出到图形设备,可以将其与多图布局中的其他图(例如直方图)组合,和/或保存为png文件,那将是很好的。我知道你可以输出LaTeX并将其编译成pdf(例如,参见:Stem and Leaf from R into LaTeX),但这不是非常方便,并不是我真正想要的。是否有R功能可以做到这一点?有简单的手工编码解决方案吗?
答案 0 :(得分:10)
这是一个简单的例子:
plot.new()
tmp <- capture.output(stem(iris$Petal.Length))
text( 0,1, paste(tmp, collapse='\n'), adj=c(0,1), family='mono' )
如果要覆盖直方图,那么您可能希望在text
而不是tmp
的每个元素上使用paste
函数。 strheight
和strwidth
等函数可用于查找坐标。
gplots和plotrix软件包中还有函数用于绘制文本和将表添加到图中(其他软件包中的其他函数也可能存在于这些行中)。
答案 1 :(得分:3)
以下是等效的:
set.seed(1)
xx = rbinom(10, size=10, prob=.5)
barplot(t(table(xx)), horiz=T)
更为相似:
set.seed(1)
xx = rnorm(10)
xxch = as.character(xx)
ff = sapply(strsplit(xxch, '\\.'), function(x) x[1])
ss = sapply(strsplit(xxch, '\\.'), function(x) x[2])
first = sapply(strsplit(ss, ''), function(x) x[1])
second = sapply(strsplit(ss, ''), function(x) x[2])
third = sapply(strsplit(ss, ''), function(x) x[3])
dd = data.frame(ff, first, second, third)
dd = cbind(dd[1], sapply(dd[-1], as.numeric))
ddt = data.table(dd)
gg = ddt[order(ff,first)][,paste(first, collapse=""),by=ff]
gg$rr = rownames(gg)
ggplot(gg)+geom_text(aes(x=rr, y=1, label=paste(ff,'|',V1))) +
theme(axis.text = element_blank(),axis.title = element_blank(), axis.ticks=element_blank()) +
coord_flip()+ labs(title="Decimal is at |")
可能需要针对不同的集调整代码。
使用capture.output(由@Greg建议)并使用ggplot绘图:
tmp <- capture.output(stem(iris$Petal.Length))
stemdf = data.frame(tmp, rr=1:length(tmp))
ggplot(stemdf)+ geom_text(aes(x=rr, y=0, label=tmp), hjust=0) +
coord_flip()+ theme_classic() +
scale_x_discrete(breaks=NULL)+
scale_y_discrete(breaks=NULL, limits=c(0,1))+
theme(axis.text = element_blank(),
axis.title = element_blank(),
axis.ticks=element_blank(),
panel.grid=element_blank(),
axis.line=element_blank())