6
votes

R simplifier la chaleur au format PDF

Je veux tracer une chaleur simplifiée qui n'est pas si difficile à éditer avec le programme graphique vectoriel scalaire que j'utilise (Inkscape). La chaleur originale telle que produite ci-dessous contient de nombreux rectangles et je me demande si elles pourraient être fusionnées dans les différents secteurs pour simplifier le fichier PDF de sortie:

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


3 commentaires

Vous pouvez essayer useraster = true dans votre heatmap appelé, qui sera transmis à image et générer un objet raster au lieu d'un tas de rectangles. Je ne sais pas comment l'inkscape le gérera, mais cela rend le PDF 5 fois plus petit ...


L'inkscape sur mon PC parvient à le charger avec useraster = true mais à ce stade, c'est pris 70% de mon bélier. J'ai tué l'inkscape qui essayait de charger la version non useraster lorsqu'elle est arrivée à 80% de la RAM. Pour être honnête, r ne le gère pas trop bien, si je redimensionniste la fenêtre de la parcelle, tout change, éventuellement en aliasant entre les données et les pixels d'affichage. Abandonner, visualisez plus intelligemment.


J'ai essayé useraster = true, mais l'image n'apparaît que blanc, même avant que je fasse dev.copy2pdf. Les seuls bits montrés sont les deux barres arc-en-ciel à gauche et en haut ...


3 Réponses :


1
votes

Pourquoi n'essayez-vous pas rsvgdevice? Utilisation de votre image Vous pouvez enregistrer votre image en tant que fichier SVG, qui est très pratique pour l'encart que PDF


1 commentaires

Merci. Existe-t-il un équivalent du dev.copy2pdf mais pour dev.copy2svg ?



1
votes

J'utilise le package CAIRO pour la production de SVG. C'est incroyablement facile. Voici une parcelle beaucoup plus simple que celle que vous avez dans votre exemple: xxx

lors de l'ouverture de l'encre, vous pouvez déclencher les éléments et modifier comme vous le souhaitez.

Exemple (point déplacé, tournez ajouté):

Entrez la description de l'image ici < / p>


0 commentaires

0
votes

Je ne pense pas que nous (Internet) sont assez clairs sur celui-ci.

Permettez-moi de commencer avec un exemple d'exportation réussie xxx

le dev.off () bit, dans mon esprit, me rappelle un extrémiser appeler un bloc de rubis ou une méthode, dans laquelle la dernière ligne du "imbriqué" ou ci-joint (entre png () et dev.off () ) La sortie du code est ce qui se fait larguer dans le fichier PNG.

Par exemple, si vous a exécuté ce code: xxx

Il sortirait le 2e (jeu de couleurs verdoyé, je viens de le tester) HeatMap sur le fichier heatmap4.png, tout comme comment une méthode rubis renvoie sa dernière ligne par défaut


0 commentaires