692 votes

Comment pouvons-nous rendre graphiques style xkcd en R ?

Apparemment, les gens ont compris comment faire de xkcd style graphiques dans Mathematica et en LaTeX. Pouvons-nous le faire dans la R? Ggplot2-ers? Un geom_xkcd et/ou theme_xkcd?

Je suppose que dans la base de graphiques, par(xkcd=TRUE)? Comment dois-je faire?

xkcd#1064

Comme un premier coup de couteau (et comme beaucoup plus élégamment illustré ci-dessous) dans ggplot2, l'ajout de la gigue argument d'une ligne pour une grande main. So -

ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) + 
  geom_line(position="jitter", color="red", size=2) + theme_bw()

Il en fait un bon exemple - mais les axes et les polices apparaissent plus délicat. Les polices apparaissent résolu (ci-dessous). Est la seule façon de traiter avec les axes de vide et de les dessiner à la main? Est-il une solution plus élégante? En particulier, dans ggplot2, peut element_line dans le nouveau système de thème être modifié pour prendre un jitter comme argument?

422voto

<p>Vous pouvez considérer le package suivant :<p><a href="http://xkcd.r-forge.r-project.org/">Paquet xkcd</a>: tracé graphique de ggplot2 dans un style XKCD.</p><pre><code></code></pre><p>Quelques exemples (diagrammes, graphiques à barres) :</p><ul> <li>Nuage de points :</li> </ul><p><img src="http://i.stack.imgur.com/IWMKd.png" alt="Scatterplot"></p><ul> <li>Graphique à barres :</li> </ul><p><img src="http://i.stack.imgur.com/LyEvh.png" alt="Bar Chart"></p></p>

216voto

Mark Bulling Points 1429
<p>Schéma de pensée la même ligne que certaines autres réponses, j’ai « ONU-ggplotted » le tableau et également ajouté sur la flexibilité de l’emplacement d’étiquette axe x (ce qui semble être commune à xkcd) et d’une étiquette arbitraire sur le graphique.<p>Notez que j’ai eu quelques problèmes avec le chargement de la police Sans humour et téléchargé manuellement dans le répertoire de travail.</p><p><img src="http://i.stack.imgur.com/uMUym.jpg" alt="enter image description here"></p><p>Et le code...</p><pre><code></code></pre></p>

189voto

user295691 Points 2156
<p>Fonction de base-dessin au trait :<pre><code></code></pre><p>Axe de base :</p><pre><code></code></pre><p>Et l’exemple de code :</p><pre><code></code></pre><p>Produit :</p><p><img src="http://i.stack.imgur.com/Bx2Mm.png" alt="Example chart"></p></p>

137voto

Ben Bolker Points 50041

Voici une tentative de polices, basé sur des liens à partir de la xkcd les forums et l' extrafont paquet de:

Comme indiqué ci-dessus il y a un forum de discussion sur les polices sur le site xkcd: j'ai attrapé le premier que j'ai pu trouver, il y a peut être d'autres (mieux?) options (@jebyrnes postes une autre source possible de polices de caractères dans les commentaires ci-dessus, la TTF fichier est ici):

   xkcdFontURL <- "http://simonsoftware.se/other/xkcd.ttf"
   download.file(xkcdFontURL,dest="xkcd.ttf")

(C'est pour quickie, utilisation: pour une utilisation régulière, vous devriez le mettre dans une norme de système de répertoire de police.)

   library(extrafont)

La plupart des informations utiles sur les polices était sur le extrafont github site -- ceci est pris à partir de là

font_import(".")   ## because we downloaded to working directory
loadfonts()

Exemple pris plus ou moins textuellement à partir de la page github:

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text=element_text(size=16, family="xkcd"))

ggsave("xkcd_ggplot.pdf", plot=p,  width=4, height=4)
## needed for Windows:
##   Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.05/bin/gswin32c.exe")
embed_fonts("xkcd_ggplot.pdf")

enter image description here

14voto

Dason Points 18263
<p>Il s’agit d’un début très, très difficile et que l’oeil de couvertures (partiellement) le dessinés à la main et sentir des lignes. Il faudrait un peu de travail pour automatiser ce processus mais ajoutant certains bruits AR (1) à la fonction de réponse pourrait faire paraître légèrement dessinés à la main<pre><code></code></pre></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X