9
votes

Ajouter une image à une sortie de table en r

J'ai une structure de données simple: les cas sont des pays et pour chaque pays, j'ai quelques variables numériques. Comme:

dat <- data.frame(country = c("Belgium", "Germany", "Holland", "Ireland"), Var1 = 1:4, Var2 = 11:14)
print(dat, row.names = FALSE)

 country Var1 Var2
 Belgium    1   11
 Germany    2   12
 Holland    3   13
 Ireland    4   14


2 commentaires

La réponse à cela dépendra du format éventuel du document résultant (HTML, PDF, Word, etc.).


Le format final sera pdf.


3 Réponses :


3
votes

avec Cette fourchette expérimentale de gtable , vous pouvez faire,

require(gtable)

dat <- data.frame(country = c("Belgium", "Germany", "Holland", "Ireland"), Var1 = 1:4, Var2 = 11:14)
g <- gtable_table(dat)

library(png)
# pirate-land flag for illustration
img <- readPNG(system.file("img", "Rlogo.png", package="png"), native = FALSE)
imgRgb <- rgb(img[,,1],img[,,2],img[,,3])
dim(imgRgb)  <- dim(img)[1:2]
flags <- replicate(nrow(g), rasterGrob(imgRgb), simplify = FALSE)
g <- gtable_add_cols(g, unit(1,"cm"), 0)
g <- gtable_add_grob(g, flags, t = seq_len(nrow(g)), l=1, r=1, z=1)

grid.newpage()
grid.draw(g)


1 commentaires

Bonjour Baptiste, c'est une option intrigante. Il est certainement facile d'ajouter un formatage à la table comme celui-ci (comme alternativement l'ajout d'un fond lightgrey aux rangées). Je vais devoir étudier cela plus loin, merci.



21
votes

14 commentaires

C'est vraiment sympathique. En effet, je viens de commencer à travailler avec Knitr pour pouvoir créer le rapport que cette table fera partie. Je n'avais pas encore compris cette solution et j'étais sur le point de commencer à écrire du code dans H HTML pour que cela se produise. Mais votre solution est assez simple. Serait-il un avantage pour aller à la route HTML R pour cela?


@PeterverBeet HTML est beaucoup plus amusant que le mot ou le latex. Si vous jetez un coup d'œil au lien RMARKMODDOW, j'ai inclus dans la réponse, vous réaliserez que la sortie du marquage R n'est pas nécessairement HTML.


Existe-t-il un moyen de faire la même chose, tout en utilisant du latex au lieu de Remmound? J'ai essayé avec "\ inclugraphics" dans le drapeau $ $, mais cela tombe sur la manière dont j'essaie.


@Peterverbeet Il peut y avoir quelques problèmes: 1. Vous avez besoin de \\ inclugraphics (deux backslashes); 2. Les drapeaux doivent exister localement (les liens HTTP ne fonctionneront pas en latex).


Merci, cela fonctionne, j'apprécie vraiment votre guidage. Puis-je passer des options de mise en page supplémentaires à Kable? Je voudrais faire du texte dans la rangée supérieure audacolaire et aimerais remplir les rangées en alternance avec le blanc et le gris. Est-ce possible?


@Peterverbeet Je crois que vous pouvez trouver un paquet de latex pour le faire, au lieu de le faire dans R.


@PeterverBeet Pourriez-vous fournir le code pour insérer des images dans les tableaux PFD, à l'aide d'incluse_graphics ()?


Il pourrait être intéressant de regarder le package pixiedust pour des graphiques de fond pour les tables de R.


@Yihuixie: Lorsque j'utilise votre code pour compiler un PDF au lieu de HTML, je reçois l'erreur suivante: ! Erreur pdftex.def: fichier "http://flagpedia.net/data/flags/mini/ca.png" non trouvé: Utilisation du réglage brouillon. . Existe-t-il un moyen de contourner cela pour générer une version PDF? Merci d'avance!


Voir aussi ma question associée ici: Stackoverflow.com/questions/58204272/...


@Mavericks J'ai mis à jour ma réponse pour la sortie PDF. Vous devez télécharger les images.


@Yihuixie, merci pour votre réponse rapide et la Reprex, qui fonctionne bien dans un simple fichier de marquage. Cependant, dans un PDF compilé avec une réserve, il affiche simplement ! [] (Ca.png) au lieu du drapeau de la table. Auriez-vous des recommandations sur la façon de le faire fonctionner là aussi?


@Mavericks utilise kable (..., format = 'pandoc') si vous utilisez une réserve.


Merci @yihuixie, ça fonctionne bien! Auriez-vous également des recommandations sur la manière d'améliorer la table de marquage ou de l'approche de la table KABLE / KABLEEXTRA à ma question à ma question ici Stackoverflow.com/cevestions / 58204272 / ... ? Merci d'avance!



1
votes

La question a été posée avec pdf comme sortie, voici une réponse à l'aide de Knitr, et quelque chose de plus approprié que simplement \ includegraphics

 table avec des drapeaux

le Truc est d'utiliser le package de réglage en latex, avec les arguments suivants:

  • la hauteur (code> (ultérieurement utilisé comme argument sur la fonction R get_picture_code ) est la hauteur de l'image.
  • L'argument Valign (quel défaut ici à Valign = M), effectuera un réglage vertical en fonction du texte,
  • le margin est défini ici comme 1ex entourant l'image permet de séparer les drapeaux.

    Nous n'utilisons donc que cette fonction xxx

    pour obtenir un vecteur d'images ajoutées à la table.


    enfin Nous utilisons Xtable avec argument sanitize.text.function = identité pour imprimer le code Tex: xxx

    le Réglal La documentation contient de nombreuses autres options, y compris les couleurs d'arrière-plan, la garniture, l'alignement horizonaire qui vous permettra faire un ajustement très fin de la position des images ... Il existe également un bel exemple d'utilisation de ce paquet dans Tex -Latex stackexchange


0 commentaires