2015-03-10 11 views
7

Tufte daje dobry zły przykład, dlaczego krzyż kreskowanie jest zakłócenie, efekt migotać (. Wizualizacją informacji ilościowych, 2001, str 108), która wygląda podobnie do:Odtworzenie Tufte Moiré wibracje

enter image description here

Chociaż jego jest bardziej ostry. Jak mogę to powtórzyć w R? Ponieważ nie jest to uważane za dobrą praktykę, znalezienie najłatwiejszej metody replikacji jest trudnym zadaniem.

Odpowiedz

9

Oto opcja korzystania 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

Edit za Tyler: Oto, co kiedyś dokładnie w doc knitr, tak denerwujące, jak w oryginale.

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

To była najlepsza ze złych odpowiedzi. Nieczęsto chcesz złych odpowiedzi :-) To był prawdziwy obrońca Tufte +1 –

+1

Dzięki Tyler. Czasem dobrze jest być złym. Ale proszę, nie mów Hadley. Nie chcę zostać wyrzucony z klubu. – eipi10

9

polygon na ratunek:

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

Ładna odpowiedź i sprytne użycie wielokąta. Końce były trochę zaokrąglone, co jest w porządku, ale próbowałem zbliżyć się do Tufte'a jak to tylko możliwe. +1 Dziękuję. –

+1

@TylerRinker - łatwo naprawić, dodając argument 'lend ='. '? par' zawiera listę wszystkich niezliczonych opcji, których można użyć do dostosowania typu linii. Poza tym możesz po prostu powiększyć wielokąt większy niż obszar wydruku, jeśli chcesz go przyciąć. Lub użyj '? Clip' przed wykreśleniem wielokąta - np .: 'klip (1.1.1.9,0.1,0.9)' – thelatemail

+0

Niezłe połączenie. Rzadko pracuję już nad podstawową grafiką i zapominam o tonie tego, co możesz zrobić. –

6

Dla kompletności Oto rozwiązanie ggplot2, jak zawsze wyzwaniem jest uzyskanie podstawowych danych prawo ...

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

Dzięki za podejście do siatki. Ten wymagał więcej inżynierii. +1 –

Powiązane problemy