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 Réponses :
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 P>
Merci. Existe-t-il un équivalent du dev.copy2pdf code> mais pour dev.copy2svg code>?
J'utilise le package lors de l'ouverture de l'encre, vous pouvez déclencher les éléments et modifier comme vous le souhaitez. P> CAIRO code> pour la production de SVG. C'est incroyablement facile. Voici une parcelle beaucoup plus simple que celle que vous avez dans votre exemple: Exemple (point déplacé, tournez ajouté): h3>
p> < / p>
Je ne pense pas que nous (Internet) sont assez clairs sur celui-ci.
Permettez-moi de commencer avec un exemple d'exportation réussie p> le Par exemple, si vous a exécuté ce code: p> 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 p> p> dev.off () code> bit, dans mon esprit, me rappelle un extrémiser code> appeler un bloc de rubis ou une méthode, dans laquelle la dernière ligne du "imbriqué" ou ci-joint (entre png () code> et dev.off () code>) La sortie du code est ce qui se fait larguer dans le fichier PNG. p>
Vous pouvez essayer
useraster = true code> dans votreheatmap code> appelé, qui sera transmis àimage code> 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 code> 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 ...