web-dev-qa-db-fra.com

Enregistrement de l'intrigue au tiff, avec une haute résolution pour publication (en R)

Un journal auquel nous envoyons un article demande ce qui suit:

Pour assurer la meilleure qualité de reproduction de vos figurines, nous apprécierions les fichiers haute résolution. Tous les chiffres doivent de préférence être au format TIFF ou EPS ... et doivent avoir la résolution suivante:
Graphique: 800 - 1200 DPI
Photo: 400 - 800 DPI
Couleur (CMJN uniquement): 300 - 400 DPI (DPI = points par pouce)

Depuis que j'envoie un graphique, j'essaie de l'enregistrer en utilisant tiff.

Voici le code que j'utilise:

tiff(filename = "c:\\aaa.tiff", 
     res = 800, pointsize = 2)
plot(1:100)
dev.off()    

Mais malheureusement, il produit une image très "volumineuse" - et si je ne pas utiliser pointsize = 2, J'obtiendrais le message d'erreur:

Erreur dans plot.new (): les marges des figures sont trop grandes

Aucune suggestion?

27
Tal Galili

réponse courte:

C'est un fichier volumineux car plus le fichier raster de résolution (TIFF) est élevé, plus le fichier est volumineux.

L'autre option, EPS, est comme PDF ou PS. Il suffit d'enregistrer dans l'un de ceux-ci. C'est un format d'image vectorielle et celui qu'ils ont dit était acceptable. Il sera plus compact et de meilleure qualité ( sauf si votre figure contient un nombre énorme de points ou de lignes.)

longue réponse:

Un format qu'ils ont demandé est TIFF, un format raster. Il enregistre les informations en tant que valeur représentant chaque pixel de l'image. Si l'image est de 100 DPI et de 5 pouces carrés, cela fait 500x500 et cela permet d'économiser 250000 pixels d'informations. À mesure que la résolution de l'image augmente et que la taille de l'image reste constante, les points d'information nécessaires augmentent. À 200 DPI, c'est 1000x1000 et 1e6 pixels d'informations, ce qui explique pourquoi votre fichier est si volumineux.

Pour avoir une image imprimée de qualité au carré de 5 ", vous auriez besoin d'environ 300-400 DPI (points par pouce). De cette façon, vous ne verrez pas chacun de ces petits pixels individuels qui composent l'image. Si elle est à un niveau inférieur résolution, l'image est toujours de 5 "x 5" mais chaque bloc carré (pixel) qui compose l'image est si grand que vous pouvez les voir. C'est pourquoi ils ont demandé cette résolution. Sinon, du texte et des lignes dans vos graphiques apparaîtraient en bloc, irrégulier ou flou. C'est pourquoi le texte sur l'écran de votre ordinateur (seulement environ 100 DPI de nos jours) n'est pas de la même qualité qu'imprimé sur une feuille de papier (généralement au moins 300 dpi).

L'autre format demandé était EPS. Il s'agit d'un post-scriptum encapsulé. Puisqu'il s'agit d'un fichier PS d'une seule page, ou postscript, serait équivalent. Et, PDF est également similaire. Ce sont tous des formats vectoriels, essentiellement le même format vectoriel (ils peuvent aussi contenir des images au format raster mais ignorons cela).

Un fichier au format vectoriel enregistre les informations sur la façon dont l'image a été dessinée, mais pas sur chaque pixel. Si vous avez un axe x de 3 "de long placé à 0,5" du bas de l'image, le fichier vectoriel connaît cette description. Chaque caractéristique du graphique est décrite dans le fichier. De ce fait, pour les dessins simples, il est beaucoup plus compact que toute représentation raster à une qualité d'image donnée. De plus, il évolue en taille sans perte de qualité. Vous lui demandez simplement de dessiner l'image à 6 "x 6" au lieu de 5 "x 5" et il met également à l'échelle chacune des instructions pour dessiner les composants de l'image. Par conséquent, même si le fichier PDF ou EPS sera plus compact, il imprimera avec la plus haute qualité.

Envoyez un PDF ou fichier PS et ne vous inquiétez pas de la résolution.

18
John

Une chose que vous devez faire est d'utiliser le paramètre de compression.

Par exemple:

tiff("outfile.tif", compression = "lzw")

LZW est un format de compression sans perte, vous ne perdrez donc aucune donnée, mais vous réduirez certainement la taille du fichier.

28
nico

Lorsque vous augmentez la résolution (res), la taille effective d'un tracé diminue et donc l'erreur de marge saute. Essayez de faire une plus grande image avec une plus grande width et height (en théorie, pour faire un tracé de la même taille virtuelle, ce devrait être new_(width|height)=res/72*old_(width|height).
Pourtant, comme l'a suggéré romunov, il est préférable d'utiliser ImageMagick; vous ne perdrez pas la qualité.

11
mbq

Je vous suggère d'utiliser devEval à partir de R.devices bibliothèque.

J'ai eu ce problème moi-même et l'ai résolu grâce à ceci:

  options("devEval/args/path"=file.path(Folder_of_Output))
  devEval("tiff", name="Name_output", width=120, height=800, {
  barplot(data, main="imagetitle");
  legend("top", legend =c("text of legend"))
  })

Pour moi, cela a fonctionné comme un charme et le fichier a été enregistré directement sans problème.

1
Stéphanie Arnoux