首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R将热图简化为pdf

R将热图简化为pdf
EN

Stack Overflow用户
提问于 2013-02-10 20:54:12
回答 3查看 2.8K关注 0票数 6

我想绘制一个简化的热图,用我正在使用的标量矢量图形程序(inkscape)来编辑它并不是那么困难。下面生成的原始热图包含许多矩形,我想知道是否可以将它们合并到不同的扇区中,以简化输出的pdf文件:

代码语言:javascript
复制
nentries=100000
ci=rainbow(nentries)
set.seed=1
mean=10
## Generate some data (4 factors)
i = data.frame(
  a=round(abs(rnorm(nentries,mean-2))),
  b=round(abs(rnorm(nentries,mean-1))),
  c=round(abs(rnorm(nentries,mean+1))),
  d=round(abs(rnorm(nentries,mean+2)))
  )
minvalue = 10
# Discretise values to 1 or 0
m0 = matrix(as.numeric(i>minvalue),nrow=nrow(i))
# Remove rows with all zeros
m = m0[rowSums(m0)>0,]
# Reorder with 1,1,1,1 on top
ms =m[order(as.vector(m %*% matrix(2^((ncol(m)-1):0),ncol=1)), decreasing=TRUE),]
rowci = rainbow(nrow(ms))
colci = rainbow(ncol(ms))

colnames(ms)=LETTERS[1:4]
limits=c(which(!duplicated(ms)),nrow(ms))
l=length(limits)
toname=round((limits[-l]+ limits[-1])/2)
freq=(limits[-1]-limits[-l])/nrow(ms)

rn=rep("", nrow(ms))
for(i in toname) rn[i]=paste(colnames(ms)[which(ms[i,]==1)],collapse="")
rn[toname]=paste(rn[toname], ": ", sprintf( "%.5f", freq ), "%")

heatmap(ms,
        Rowv=NA,
        labRow=rn,
        keep.dendro = FALSE,
        col=c("black","red"),
        RowSideColors=rowci,
        ColSideColors=colci,
        )

dev.copy2pdf(file="/tmp/file.pdf")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-18 19:44:02

你为什么不试试RSvgDevice呢?使用它你可以保存你的图像为svg文件,这对于Inkscape来说要比pdf方便得多

票数 1
EN

Stack Overflow用户

发布于 2013-02-26 00:52:56

我使用Cairo包来生成svg。这是非常简单的。这是一个比你的例子中的要简单得多的图:

代码语言:javascript
复制
require(Cairo)
CairoSVG(file = "tmp.svg", width = 6, height = 6)
plot(1:10)
dev.off()

在Inkscape中打开后,您可以取消对元素的分组并根据需要进行编辑。

示例(移动了点,添加了涡流):

票数 1
EN

Stack Overflow用户

发布于 2013-03-24 13:00:19

我认为我们(互联网)在这一点上还不够清楚。

让我从一个成功的导出示例开始

代码语言:javascript
复制
png("heatmap.png") #Ruby dev's think of this as kind of like opening a `File.open("asdfsd") do |f|` block
heatmap(sample_matrix, Rowv=NA, Colv=NA, col=terrain.colors(256), scale="column", margins=c(5,10))
dev.off()

在我看来,png位让我想起了对ruby块或方法的end调用,因为“嵌套”或封闭(在png()dev.off()之间)代码输出的最后一行就是被转储到png文件中的内容。

例如,如果您运行以下代码:

代码语言:javascript
复制
png("heatmap4.png")
heatmap(sample_matrix, Rowv=NA, Colv=NA, col=terrain.colors(32), scale="column", margins=c(5,15))
heatmap(sample_matrix, Rowv=NA, Colv=NA, col=greenred(32), scale="column", margins=c(5,15))
dev.off()

它会将第二个(绿色配色方案,我刚刚测试过) heatmap输出到heatmap4.png文件,就像ruby方法默认返回最后一行一样

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14798043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档