R 如何将茎叶绘图输出为绘图

R 如何将茎叶绘图输出为绘图,r,plot,R,Plot,是否有方法将茎叶图输出到图形设备,例如window()/quartz()?至少有两种方法可以在R:、图形包和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 如果可以方便地将其输出到图形设备,在该设备中,它可以与

是否有方法将茎叶图输出到图形设备,例如
window()
/
quartz()
?至少有两种方法可以在R:、图形包和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(例如,请参阅:),但这不是很方便,也不是我真正想要的。是否有一个R函数可以做到这一点?是否有简单的手工编码解决方案?

以下是等效的:

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())

tmp这里有一个简单的例子:

plot.new()
tmp <- capture.output(stem(iris$Petal.Length))
text( 0,1, paste(tmp, collapse='\n'), adj=c(0,1), family='mono' )
plot.new()

tmp看一看
package:ascii
CRAN上的pdf文档非常稀少,@bondedust。您是否考虑使用
fig()
捕获输出并将其保存为png?它或者其他功能能输出到一个标准的图形窗口吗?嗯,不太可能。我想您需要将
capture.output()
的结果发送到某个标记(向上/向下)设施。我同意尝试在默认打印设备上进行任何ascii打印都有点痛苦。我能做到,但只有痛苦。谢谢。我认为这是唯一等价的,因为我的示例的输出是整数。考虑这种情况下的输出:<代码> SET.SEED(1);stem(rnorm(10))
。请参阅上面我的答案的补充。我认为@GregSnow的代码可能更容易使用,但我感谢您为帮助我所做的努力。ggplot还可以用于绘制捕获的文本(添加到上面我的答案中)。这里可能有更多的调整选项。@mso,当lhs将一位数与两位数组合在一起时,您知道如何修复
的对齐方式吗。?(在
ggplot2
中)谢谢。这让我回想起了我的C编程课程。这基本上就是我所说的“痛苦”方法。我想你(几年前)也描述了一个发送到gnuplot的设施。@bondedust,我不认为上面的描述太痛苦。试图用直方图来排列所有的东西会让人感到不舒服,但我不认为这是痛苦的。我的评论太消极了。我认为你的答案和问题都很有用。那太好了,格雷格。谢谢。我还将其合并到函数
stem.plot中