web-dev-qa-db-fra.com

R Échelle des éléments de tracé dans PDF de la largeur et de la hauteur définies

Bien que les tracés R envoyés à un PDF peuvent être redimensionnés à volonté dans un logiciel d'illustration ou de mise en page, les revues scientifiques insistent souvent sur le fait que les tracés fournis ont des dimensions spécifiques.

La taille de tous les éléments de traçage peut-elle être mise à l'échelle dans une taille donnée PDF directement dans R?

require(ggplot2)

p <- qplot(data=iris,
           x=Petal.Width,
           y=Petal.Length,
           colour=Species)

pdf("./test_plot_default.pdf")
print(p)
graphics.off()

Produit une mise à l'échelle adéquate des éléments de tracé

test plot with default pdf size

Toutefois, la modification des éléments de taille PDF n'entraîne pas la mise à l'échelle des éléments de tracé. Avec des fichiers PDF plus petits, les éléments de traçage sont trop agrandis par rapport à l'espace de traçage.

pdf("./test_plot_dimentionsions required by journal.pdf", width=3, height=3)
print(p)
graphics.off()

enter image description here

Utilisation de la suggestion @Rosen Matev:

update_geom_default("point", list(size=1))
theme_set(theme_grey(base_size=6))
pdf("./test_plot_dimentionsions required by journal.pdf", width=3, height=3)
print(p)
graphics.off()

enter image description here

23

Les journaux insistent pour avoir des dimensions de tracé spécifiques afin d'éviter une mise à l'échelle. S'il est fait, il peut rendre la taille de police trop petite (ou grande) et incohérente avec la taille de la police des légendes des figures. C'est pourquoi les éléments de tracé (texte, taille en points, etc.) par conception ont la même taille absolue quelle que soit la taille du pdf.

Vous pouvez modifier la taille de police et la taille de point par défaut, par exemple, avec:

p <- ggplot(iris, aes(x=Petal.Width, y=Petal.Length, colour=Species)) +
  geom_point(size=1.5) +  # default is 2
  theme_grey(base_size=10)  # default is 12
ggsave("test.1.pdf", p)

Les valeurs par défaut peuvent également être modifiées globalement:

update_geom_defaults("point", list(size=1.5))
theme_set(theme_grey(base_size=10))
6
Rosen Matev

Curieusement, vous pouvez le faire avec scale= Dans ggsave(...)

require(ggplot2)
p <- qplot(data=iris, x=Petal.Width, y=Petal.Length, colour=Species)
ggsave("test.1.pdf",p)
ggsave("test.2.pdf",p, width=3, height=3, units="in", scale=3)

Essayez de jouer avec le paramètre scale et voyez ce que vous obtenez ...

4
jlhoward

Pensez à utiliser largeur, hauteur et taille des points dans la fonction pdf ().

Si vous préférez utiliser pdf () au lieu d'utiliser d'autres méthodes comme sweave, vous feriez mieux d'utiliser la fonction pdf avec plus d'arguments, comme ci-dessous (je n'ai pas installé ggplot2, donc le cas simillar est fourni).

# making scaled plot in pdf
# using paper=a4 just to see the efect

for (sc in c(0.5,0.75,1)) {
pdf(width=7*sc,height=7*sc,pointsize=12*sc,file=paste("scale",sc,".pdf",sep=""),paper="a4")
plot(sin((1:314)/100),main=paste("PDF sc",sc))
dev.off()  
}

Il est tout à fait utilisable, mais fonctionne dans une certaine mesure. Une fois l'échelle trop petite, le pdf commencera à appliquer la largeur de ligne, la taille de police, etc.

Voir les résultats à l'échelle * .pdf créé par l'exemple.

Et pour ggplot2 ...

sc <- c(0.5,0.75,1)
fi <- c("pic1.pdf","pic2.pdf","pic3.pdf")

require(ggplot2)
p <- qplot(data=iris,
x=Petal.Width,
y=Petal.Length,
colour=Species)

for (i in 1:3) {
pdf(width=7*sc[i],height=7*sc[i],pointsize=12*sc[i],file=fi[i])
print(p)
dev.off()  
}

Code latex pour tester l'apparence des fichiers dans un seul document:

\documentclass[a4paper,11pt]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphics}

\begin{document}

\begin{figure}
     \includegraphics{pic1.pdf}
 \end{figure}

\begin{figure}
     \includegraphics{pic2.pdf}
\end{figure}

\begin{figure}
    \includegraphics{pic3.pdf}
\end{figure}

\end{document}
3
Petr Matousu

Une option tout aussi bonne ou meilleure que le pdf est tiff. Tous les journaux que j'ai rencontrés comme Tiff.

tiff(filename="name.tiff", width=5, height=5, units="in",
     pointsize=8, compression="lzw", bg="white", res=600,
     restoreConsole=TRUE)
qplot(data=iris, x=Petal.Width, y=Petal.Length, colour=Species)
dev.off()

Si vous êtes sous Linux, supprimez restoreConsole=TRUE, semble que seules les fenêtres aiment ça.

0
JeremyS