768 Stimmen

Wie können wir Diagramme im Stil von Xkcd erstellen?

Offenbar haben die Leute herausgefunden, wie man xkcd Stil-Grafiken in Mathematica y in LaTeX . Können wir das in R machen? Ggplot2-er? Ein geom_xkcd und/oder theme_xkcd?

Ich schätze, in der Basisgrafik ist par(xkcd=TRUE)? Wie mache ich das?

xkcd#1064

Ein erster Versuch (und wie unten viel eleganter gezeigt) in ggplot2 ist das Hinzufügen des Jitter-Arguments zu einer Linie, um einen tollen handgezeichneten Look zu erzielen. So -

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

Das ist ein schönes Beispiel - aber die Achsen und die Schriftarten scheinen schwieriger zu sein. Die Schriftarten scheinen jedoch gelöst zu sein (siehe unten). Ist die einzige Möglichkeit, mit Achsen umzugehen, sie auszublenden und sie von Hand einzuzeichnen? Gibt es eine elegantere Lösung? Kann insbesondere in ggplot2 element_line im neuen Themensystem so modifiziert werden, dass es ein Jitter-ähnliches Argument akzeptiert?

14voto

Dason Punkte 58072

Dies ist ein sehr, sehr grober Anfang und deckt nur (teilweise) das handgezeichnete Aussehen und Gefühl der Linien ab. Es würde ein wenig Arbeit erfordern, dies zu automatisieren, aber das Hinzufügen von AR(1)-Rauschen zur Antwortfunktion könnte es leicht handgezeichnet aussehen lassen

set.seed(551)
x <- seq(0, 1, length.out = 1000)
y <- sin(x)

imperfect <- arima.sim(n = length(y), model = list(ar = c(.9999)))
imperfect <- scale(imperfect)
z <- y + imperfect*.005
plot(x, z, type = "l", col = "blue", lwd = 2)

13voto

jslefche Punkte 4139

Hier ist meine Meinung zu den Zeilen mit ggplot2 unter Verwendung eines Teils des obigen Codes:

ggplot()+geom_line(aes(x=seq(0,1,length.out=1000),y=sin(x)),position=position_jitter(width=0.02),lwd=1.5,col="white")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=sin(x)),position=position_jitter(width=0.004),lwd=1.4,col="red")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=cos(x)),position=position_jitter(width=0.02),lwd=1.5,col="white")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=cos(x)),position=position_jitter(width=0.004),lwd=1.4,col="blue")+
  theme_bw()+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())

Ich bin mir nicht sicher, wie ich die Achsen ersetzen kann, aber ich könnte den gleichen Ansatz mit jitter . Dann müssen Sie die Schrift aus XKCD importieren und mit geom_text .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X