graphics - R 将热图简化为 pdf

标签 graphics svg inkscape r

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

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

最佳答案

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

关于graphics - R 将热图简化为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798043/

相关文章:

c - 球与线相交的参数方程和代数方程之间的区别

graphics - 如果文本模式视频缓冲区不在 0xB8000,那么它在哪里?

java - 从 JComboBox 控件重绘

css - 带缩进圆的线

php - 如何使用 Inkscape 将 SVG 字符串转换为 jpg

python - 基本的 Python 2D 图形?

math - 通过预定点的SVG曲线

svg - 将 SVG 转换为具有锐边的 PNG

svg - Inkscape CLI FileRevert 在 1.1 或 1.2 中不起作用,尝试刷新 Inkscape GUI

javascript - D3 直方图