Xóa đường viền trong các ô R để đạt được trục Tufte


18

Hãy xem xét biểu đồ sau:

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)

Làm cách nào tôi có thể xóa các đường viền được tạo tự động và chỉ giữ lại các đường trục để đạt được kiểu của Tufte?


5
Nhìn vào btyđối số trong ?par, ví dụ , bty="n". Bạn có thể chuyển đối số này trong cuộc gọi của bạn đến plot.
Glen_b -Reinstate Monica

3
FWIW, Tufte đã đi xa hơn: ông đã chỉ ra cách thức trong một số trường hợp, việc tự xóa các phần của trục cung cấp thông tin bổ sung, biến mỗi trục thành một màn hình hiển thị trực quan về phạm vi dữ liệu. Lấy cảm hứng từ điều này, vào năm 1989, tôi đã viết phần mềm để tạo ra nhiều mảnh nhỏ kết hợp thiết kế này (trong số nhiều thứ khác lấy cảm hứng từ nhóm Tufte và Bill Cleveland) và sau đó tạo ra hàng triệu đồ họa như vậy. Khi bạn phải khai thác rất nhiều dữ liệu trực quan, các nguyên tắc như vậy thực sự hoạt động.
whuber

@whuber Hiệu quả, bạn đã thay thế các trục bằng một loại âm mưu thảm?
Cá bạc

2
@Silver Vẽ một âm mưu thảm là một vấn đề riêng biệt - và tôi cũng đã làm điều đó. Tuy nhiên, ngay cả khi không có ô vẽ, bạn có thể chọn nơi dừng và bắt đầu vẽ từng trục. Khi bạn khởi động nó ở mức tối thiểu và dừng ở mức tối đa, bạn đã đạt được một đại diện trực quan về toàn bộ phạm vi của từng phân phối dữ liệu cận biên.
whuber

2
@whuber Cảm ơn, giờ tôi đã hiểu những gì bạn đang đề cập - Tufte gọi đây là "khung phạm vi" (và đề nghị không chỉ dừng các dòng ở đó, mà còn sử dụng nhãn cuối cùng để chỉ ra giá trị của chúng - những gì anh ấy gọi "khung phạm vi với nhãn phạm vi"). Đối với những độc giả sau này muốn tham khảo, đây là từ Hiển thị trực quan thông tin định lượng, Chương 7 ("Các yếu tố đồ họa đa chức năng"). Vì đây là một chủ đề được xem cao, sẽ rất tuyệt khi thấy một hình minh họa được thêm vào (và đưa ra câu hỏi, một số mã R) về "trục Tufte" thực sự có nghĩa là gì.
Cá bạc

Câu trả lời:



5

Điều này là đơn giản để làm, bạn chỉ cần bao gồm các đối số axes=FALSE. Xem xét:

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)

nhập mô tả hình ảnh ở đây

Lưu ý rằng điều này hoạt động tốt như nhau cho biểu đồ:

windows()
hist(y1, axes=F)

nhập mô tả hình ảnh ở đây


4

Nếu bạn dùng

par(bty = 'n') 

Trước khi gọi cốt truyện sẽ sửa nó cho sở thú. Nó cũng có thể sửa nó cho nhiều tình huống trong đó không thể chuyển sang lệnh vẽ.

(Kiểm tra tùy chọn bty trong trợ giúp par () cho các loại khung khác cho cốt truyện)


0

Tôi đang trả lời câu hỏi chung hơn về việc loại bỏ các đường viền trong các ô, mà không cần tham khảo Tufte.

Đối với một biểu đồ tôi không thấy rằng btn = 'n' đã thoát khỏi biên giới.

Một giải pháp hoạt động cho biểu đồ và nên hoạt động cho tất cả các loại ô là đặt loại đường cho đường viền thành vô hình: lty = "blank"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.