Menghapus batas dalam plot R untuk mencapai sumbu Tufte


18

Perhatikan grafik berikut:

x <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100)+100

par(mar=c(5,5,5,5))

plot(x,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-8,2),ylab="")
axis(side=2, at=c(-2,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=T)
plot(x,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(98,108), ylab="")
axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=100)

Bagaimana saya bisa menghapus batas yang dibuat secara otomatis dan mempertahankan hanya garis sumbu, untuk mencapai gaya Tufte?


5
Lihatlah btyargumen di ?par, misalnya bty="n",. Anda dapat meneruskan argumen ini dalam panggilan Anda ke plot.
Glen_b -Reinstate Monica

3
FWIW, Tufte melangkah lebih jauh: ia menunjukkan bagaimana dalam beberapa kasus menghapus bagian dari sumbu itu sendiri memberikan informasi tambahan, secara efektif mengubah setiap sumbu menjadi tampilan visual dari kisaran data. Terinspirasi oleh ini, pada tahun 1989 saya menulis perangkat lunak untuk menghasilkan beberapa plot kecil yang menggabungkan desain ini (di antara banyak lainnya terinspirasi oleh kelompok Tufte dan Bill Cleveland) dan kemudian menghasilkan beberapa juta grafik seperti itu. Ketika Anda harus menambang banyak data secara visual, prinsip-prinsip tersebut benar-benar berfungsi.
whuber

@whuber Secara efektif, apakah Anda mengganti kapak dengan semacam plot permadani?
Silverfish

2
@Silver Menggambar plot karpet adalah masalah yang terpisah - dan saya juga melakukannya. Namun, bahkan tanpa adanya plot karpet, Anda dapat memilih tempat untuk berhenti dan mulai menggambar setiap sumbu. Ketika Anda memulainya dengan minimum dan menghentikannya secara maksimal, Anda telah mencapai representasi visual dari jangkauan penuh dari setiap distribusi data marjinal.
whuber

2
@whuber Terima kasih, saya sekarang mengerti apa yang Anda maksudkan - Tufte menyebutnya "rentang-bingkai" (dan menyarankan tidak hanya untuk menghentikan garis di sana di ekstrema, tetapi juga menggunakan label akhir untuk menunjukkan nilai-nilai mereka - apa yang dia panggilan "range-frame with range-label"). Untuk pembaca kemudian yang menginginkan referensi, ini dari Tampilan Visual Informasi Kuantitatif, Bab 7 ("Elemen Grafis Multifungsi"). Karena ini adalah utas yang sangat banyak dilihat, alangkah baiknya untuk melihat ilustrasi yang ditambahkan (dan diberi pertanyaan, beberapa kode R) tentang apa yang sebenarnya dimaksud dengan "sumbu Tufte."
Silverfish

Jawaban:



5

Ini mudah dilakukan, Anda cukup memasukkan argumen axes=FALSE. Mempertimbangkan:

x  <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100) + 100

windows()
  par(mar=c(5,5,5,5))
  plot(x, y1, pch=0, type="b", col="red", yaxt="n", ylim=c(-8,2), ylab="", axes=F)
  axis(side=2, at=c(-2,0,2))
  mtext("red line", side = 2, line=2.5, at=0)

  par(new=T)
  plot(x, y2, pch=1, type="b", col="blue", yaxt="n", ylim=c(98,108), ylab="", axes=F)
  axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
  mtext("blue line", side=4, line=2.5, at=100)

masukkan deskripsi gambar di sini

Perhatikan bahwa ini bekerja dengan baik untuk histogram:

windows()
hist(y1, axes=F)

masukkan deskripsi gambar di sini


4

Jika Anda menggunakan

par(bty = 'n') 

Sebelum memanggil plot yang akan memperbaikinya untuk kebun binatang. Mungkin juga memperbaikinya untuk berbagai situasi di mana ia tidak bisa dilewati oleh perintah plotting.

(Lihat opsi bty di par () bantuan untuk jenis bingkai lain untuk plot)


0

Saya menjawab pertanyaan yang lebih umum tentang menghilangkan batas dalam plot, tanpa merujuk ke Tufte.

Untuk histogram saya tidak menemukan bahwa btn = 'n' menyingkirkan perbatasan.

Solusi yang berfungsi untuk histogram dan harus bekerja untuk semua jenis plot adalah dengan menetapkan tipe garis untuk perbatasan menjadi tidak terlihat: lty = "blank"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.