การลบเส้นขอบในแปลง R เพื่อให้ได้แกนของ Tufte


18

พิจารณากราฟต่อไปนี้:

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)

ฉันจะลบเส้นขอบที่สร้างขึ้นโดยอัตโนมัติและเก็บรักษาเส้นแกนไว้เพื่อให้ได้สไตล์ของ Tufte ได้อย่างไร


5
ดูที่btyการโต้แย้งในยกตัวอย่างเช่น?par คุณสามารถส่งผ่านเรื่องนี้ในการเรียกร้องให้bty="n" plot
Glen_b -Reinstate Monica

3
FWIW, Tufte กล่าวเพิ่มเติม: เขาแสดงให้เห็นว่าในบางกรณีการลบบางส่วนของแกนเองนั้นให้ข้อมูลเพิ่มเติมอย่างมีประสิทธิภาพทำให้แต่ละแกนเปลี่ยนเป็นการแสดงผลข้อมูลในช่วงข้อมูล แรงบันดาลใจจากสิ่งนี้ในปี 1989 ฉันเขียนซอฟต์แวร์เพื่อสร้างแปลงเล็ก ๆ หลายแปลงที่รวมการออกแบบนี้ (ท่ามกลางคนอื่น ๆ ที่ได้รับแรงบันดาลใจจากกลุ่มของ Tufte และ Bill Cleveland) และสร้างกราฟิกดังกล่าวหลายล้านชิ้น เมื่อคุณต้องขุดข้อมูลจำนวนมากสายตาหลักการดังกล่าวใช้งานได้จริง
whuber

@whuber อย่างมีประสิทธิภาพคุณเปลี่ยนแกนด้วยพล็อตพรมหรือไม่?
Silverfish

2
@Silver การวาดเนื้อเรื่องพล็อตพรมเป็นปัญหาที่แยกจากกัน - และฉันก็ทำเช่นนั้นเช่นกัน อย่างไรก็ตามแม้จะไม่มีพล็อตพรมคุณสามารถเลือกตำแหน่งที่จะหยุดและเริ่มวาดแต่ละแกน เมื่อคุณเริ่มต้นด้วยค่าต่ำสุดและหยุดที่ค่าสูงสุดคุณจะได้รับการแสดงด้วยภาพอย่างเต็มรูปแบบของการกระจายข้อมูลในแต่ละครั้ง
whuber

2
@whuber ขอบคุณตอนนี้ฉันเข้าใจสิ่งที่คุณอ้างถึง - Tufte เรียกสิ่งนี้ว่า "range-frame" (และแนะนำไม่เพียง แต่จะหยุดเส้นที่นั่นที่ extrema แต่ยังใช้ป้ายกำกับสุดท้ายเพื่อระบุค่าของพวกเขา - สิ่งที่เขา เรียกว่า "range-frame พร้อม range-labels") สำหรับผู้อ่านในภายหลังที่ต้องการการอ้างอิงนี้มาจากการแสดงผลข้อมูลเชิงปริมาณบทที่ 7 ("องค์ประกอบกราฟิกแบบมัลติฟังก์ชั่น") เนื่องจากนี่เป็นเธรดที่มีการดูสูงจึงเป็นการดีที่จะเห็นภาพประกอบที่เพิ่มเข้ามา (และเมื่อตั้งคำถามรหัส R บางตัว) ของสิ่งที่ "แกนของ Tufte" อาจหมายถึง
Silverfish

คำตอบ:



5

นี่เป็นเรื่องง่ายที่จะทำคุณแค่ใส่อาร์กิวเมนต์axes=FALSEเข้าไป พิจารณา:

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)

ป้อนคำอธิบายรูปภาพที่นี่

โปรดทราบว่าวิธีนี้ใช้งานได้ดีสำหรับฮิสโตแกรม:

windows()
hist(y1, axes=F)

ป้อนคำอธิบายรูปภาพที่นี่


4

ถ้าคุณใช้

par(bty = 'n') 

ก่อนเรียกพล็อตที่จะแก้ไขให้กับสวนสัตว์ นอกจากนี้ยังอาจแก้ไขได้สำหรับสถานการณ์ที่หลากหลายซึ่งไม่สามารถผ่านไปยังคำสั่งการวางแผน

(ลองใช้ตัวเลือก bty ใน par () ช่วยเหลือเฟรมชนิดอื่นสำหรับพล็อต)


0

ฉันกำลังตอบคำถามทั่วไปเพิ่มเติมเกี่ยวกับการลบเส้นขอบในแปลงโดยไม่มีการอ้างอิงถึง Tufte

สำหรับฮิสโตแกรมฉันไม่พบว่า btn = 'n' กำจัดขอบ

วิธีแก้ปัญหาที่ใช้งานได้กับฮิสโตแกรมและควรทำงานกับพล็อตทุกประเภทคือการตั้งค่าชนิดของบรรทัดสำหรับเส้นขอบเป็นล่องหน: lty = "blank"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.