2015-03-10 11 views
7

Tufte dà un buon cattivo esempio del perché Tratteggio è distorcere, l'effetto brillante (. Il Visual Display di Informazioni di natura quantitativa, 2001, p 108), che è simile a:Ricrea Tufte Moiré vibrazioni

enter image description here

Anche se è più nitido. Come posso replicare questo in R? Poiché non è considerato una buona pratica, capire come il modo più semplice per replicare si sta dimostrando difficile.

risposta

9

Ecco un'opzione usando abline:

plot(NA,NA, xlim=c(0,100), ylim=c(0,100)) 
for(i in seq(-15,600,6)) { 
    abline(i, -3, lwd=6) 
} 

enter image description here

Modifica per Tyler: Ecco quello che ho usato esattamente in un documento knitr, proprio come fastidioso come l'originale.

plot(NA,NA, xlim=c(0,100), ylim=c(0,100), ylab=NA, xlab=NA, yaxt='n', xaxt='n', bty = "n") 
for(i in seq(-15,500,6)) { 
    abline(i, -3, lwd=4) 
} 
+0

Questa era la migliore delle cattive risposte. Non spesso vuoi cattive risposte :-) Questo era il vero realista di Tufte +1 –

+1

Grazie Tyler. A volte è bello essere cattivi. Ma per favore non dirlo ad Hadley. Non voglio essere cacciato dal club. – eipi10

9

polygon in soccorso:

plot(0:1,type="n") 
polygon(
    x=c(1,1,2,2), 
    y=c(1,0,0,1), 
    density=10, 
    angle=135, 
    lwd=5, 
    border=NA 
) 

enter image description here

+0

Risposta piacevole e uso intelligente del poligono. Le estremità erano un po 'arrotondate che va bene, ma stavo cercando di avvicinarmi il più possibile a Tufte. +1 Grazie. –

+1

@TylerRinker - risolto facilmente aggiungendo un argomento 'lend ='. '? par' elenca tutte le innumerevoli opzioni che puoi usare per regolare un tipo di linea. Inoltre, è possibile rendere il poligono più grande dell'area del tracciato se lo si desidera ritagliare. Oppure usa '? Clip' prima di tracciare il poligono - per esempio :. 'clip (1.1,1.9,0.1,0.9)' – thelatemail

+0

Bella bella chiamata. Raramente lavoro nella grafica di base e dimentico una tonnellata di ciò che puoi fare. –

6

Per completezza, ecco una soluzione ggplot2, come sempre la sfida è sempre il diritto di dati sottostante ...

hatch <- function(xsequence, ysequence, weight = 1) { 
    require(ggplot2) 
    df <- data.frame(x = c(rep(0, length(ysequence)),xsequence, xsequence, rep(max(xsequence), length(ysequence))), 
        y = c(ysequence, rep(max(ysequence), length(xsequence)), rep(0, length(xsequence)), ysequence), 
        group = seq_along(1:(length(xsequence) + length(ysequence)))) 
    p <- ggplot(df, aes(x, y)) + geom_line(aes(group = group), size = weight) 
    print(p + theme(panel.background = element_rect(fill = "transparent"), 
        axis.text = element_blank(), 
        axis.ticks = element_blank(), 
        axis.title = element_blank())) 

} 
hatch(1:100, 1:40, 1.5) 

enter image description here

+0

Grazie per l'approccio alla rete. Questo ha richiesto più ingegneria. +1 –

Problemi correlati