ควบคุมขนาดของจุดในแผนภาพ R?


117

ใน R plot()ฟังก์ชันรับpchอาร์กิวเมนต์ที่ควบคุมการปรากฏของจุดในพล็อต ฉันกำลังสร้าง scatterplots ที่มีจุดนับหมื่นและชอบจุดเล็ก ๆ แต่ไม่เล็กเกินไป โดยทั่วไปฉันพบว่าตัวpch='.'เล็กเกินไป แต่pch=19ก็อ้วนเกินไป มีบางอย่างอยู่ตรงกลางหรือมีวิธีลดขนาดจุดลงบ้างไหม?


แทนที่จะทำให้จุดเล็กลงมีวิธีเพียงแค่พล็อตว่าจุดข้อมูลแบบสุ่ม 100 จุดจะดูง่ายกว่า 1,000 จุดหรือไม่?
user2363642

สำหรับจุดเล็ก ๆ หลายจุดการใช้อัลฟา (ความโปร่งใส) สามารถทำให้พล็อตกระจายข้อมูลได้มากกว่าการใช้จุดน้อยลงในการลงจุด

1
ฉันแนะนำว่าอย่าใช้pch='.'มันจะปิดศูนย์ ที่มา: ฉันเคยใช้pch='.'บ่อย
geneorama

@geneorama คุณหมายถึงใช้·แทน.?
nanaki

@nanaki ไม่มากก็น้อย แต่สัญลักษณ์ของคุณจะแสดงเป็นกล่องเล็ก ๆ เมื่อฉันใช้ใน R คำตอบด้านล่างช่วยอธิบายแนวทางที่ถูกต้องได้ดี
geneorama

คำตอบ:


101

ลองcexโต้แย้ง:

?par

  • cex
    ค่าตัวเลขที่ให้จำนวนที่ควรขยายข้อความและสัญลักษณ์ในการพล็อตโดยเทียบกับค่าเริ่มต้น โปรดทราบว่าฟังก์ชันกราฟิกบางฟังก์ชันเช่น plot.default มีอาร์กิวเมนต์ของชื่อนี้ซึ่งคูณพารามิเตอร์กราฟิกนี้และฟังก์ชันบางอย่างเช่นจุดยอมรับเวกเตอร์ของค่าที่นำกลับมาใช้ใหม่ การใช้งานอื่น ๆ จะใช้เพียงค่าแรกหากระบุเวกเตอร์ที่มีความยาวมากกว่าหนึ่ง

15
ฉันไม่คิดว่าจะใช้ 'cex' เพื่อควบคุมขนาดสัญลักษณ์เว้นแต่ฉันจะไม่มีตัวเลือกอื่น ใช้งานได้เพียงบางครั้งเท่านั้น กฎคือเมื่อตั้งค่า 'cex' ผ่าน 'พาร์' จะมีผลต่อขนาดของข้อความ (ส่วนใหญ่) บนพล็อตเมื่อตั้งค่าภายใน 'พล็อต' 'cex' จะมีผลกับขนาดสัญลักษณ์เท่านั้น ดังนั้นหากคุณใช้กฎนั้นผิดไม่เพียง แต่ขนาดสัญลักษณ์ของคุณจะไม่เปลี่ยนแปลง แต่ตอนนี้คุณมีพารามิเตอร์หลายตัวที่ส่งผลต่อขนาดข้อความ (cex.axis, cex.lab, cex.main และ cex.sub - ทั้งหมดทำเช่นเดียวกัน ทำงานเป็น 'cex' เท่านั้นที่ฉลาด) รหัสแบบนั้นยากที่จะรักษาและขยาย
doug

5
ตกลง. การตั้งค่าcexทั่วโลกผ่านparการเปลี่ยนแปลงทุกอย่างรวมถึงระยะขอบของรูปที่คุณต้องแก้ไข อย่างไรก็ตามการตั้งค่าcexภายในplotดูเหมือนจะใช้งานได้
บิน

คำแนะนำที่นำเสนอข้างต้นโดยความคิดเห็นของ doug นั้นไม่จำเป็นต้องผิดแต่จะกล่าวเกินจริงเกี่ยวกับปัญหาที่อาจเกิดขึ้นกับการใช้cexอาร์กิวเมนต์เมื่อวางแผน มีหลายกรณีที่เป็นประโยชน์และเป็นตัวเลือกที่ดีที่สุด
joran

lwdควบคุมความกว้างของเส้นของ PCH plot(1:5, pch=1:5, col=1:5, lwd=1:5)เช่น ขอขอบคุณข้อมูล sthda.com/english/wiki/…
geneorama

95

pch = 20ส่งคืนสัญลักษณ์ที่มีขนาดระหว่าง "." และ 19.

ที่เป็นสัญลักษณ์เติม (ซึ่งน่าจะเป็นสิ่งที่คุณต้องการ)

นอกเหนือจากนั้นแม้แต่ระบบกราฟิกพื้นฐานใน R ยังช่วยให้ผู้ใช้สามารถควบคุมขนาดสัญลักษณ์สีและรูปร่างได้อย่างละเอียด เช่น,

dfx = data.frame(ev1=1:10, ev2=sample(10:99, 10), ev3=10:1)

with(dfx, symbols(x=ev1, y=ev2, circles=ev3, inches=1/3,
                  ann=F, bg="steelblue2", fg=NULL))

ตัวอย่างกราฟ


ฉันชอบพล็อตนี้ แต่ฉันต้องการให้รัศมีเท่ากับจำนวนข้อสังเกตในจุดนั้นคุณช่วยแสดงวิธีการทำได้ไหม
Derk Arts

pi*R^2(พื้นผิว) ควรเป็นสัดส่วนกับจำนวนการสังเกต
SESman

5
@saratis สิ่งนี้จะทำในสิ่งที่คุณต้องการ:symbols(x=dfx$ev1, y=dfx$ev2, circles=sqrt(dfx$ev3/pi), inches=1/3, ann=F, bg="steelblue2", fg=NULL)
fmark

1
มีความคิดอย่างไรที่ฉันจะใช้สิ่งนี้เพื่อพล็อตซีรีส์หลายชุดบนกราฟเดียวกัน เช่น "จุด (x = dfx2 $ ev1, y = dfx2 $ ev2, วงกลม = dfx2 $ ev3, ... )" ไม่ทำงาน
Neodyme

ในกรณีที่คุณสงสัยว่า "นิ้วคืออะไร" ดูที่นี่
MichaelChirico

22

ตามที่ระบุไว้rcscexจะทำงานในแพ็คเกจกราฟิกพื้นฐาน ฉันคิดว่าคุณไม่เต็มใจที่จะทำกราฟของคุณggplot2แต่ถ้าคุณทำมีsizeคุณลักษณะด้านสุนทรียศาสตร์ที่คุณสามารถควบคุมได้อย่างง่ายดาย ( ggplot2มีอาร์กิวเมนต์ฟังก์ชันที่ใช้งานง่าย: แทนที่จะพิมพ์cex(การขยายอักขระ) ggplot2คุณสามารถพิมพ์เช่นsize = 2และ คุณจะได้จุด 2 มม.)

นี่คือตัวอย่าง:

### base graphics ###
plot(mpg ~ hp, data = mtcars, pch = 16, cex = .9)

### ggplot2 ###
# with qplot()
qplot(mpg, hp, data = mtcars, size = I(2))
# or with ggplot() + geom_point()
ggplot(mtcars, aes(mpg, hp), size = 2) + geom_point()
# or another solution:
ggplot(mtcars, aes(mpg, hp)) + geom_point(size = 2)

4
และหากคุณกำลังวางแผนหลายหมื่นจุดจริงๆ ggplot2 มีทางเลือกหลายวิธีในการทำให้มันดูดีเช่นการปรับอัลฟ่าถังขยะฐานสิบหกโครงร่าง ฯลฯ ดูหน้า 72-77 ของหนังสือ ggplot2 หากมี ในห้องสมุดของคุณหรือหากห้องสมุดของคุณมีการเข้าถึงหนังสือ Springer แบบอิเล็กทรอนิกส์ (ฉันคิดว่าหนังสือ R ส่วนใหญ่อยู่ในนั้น)
Matt Parker

ใช่ ... ฉันใช้alphaใน scatterplots เป็นพิเศษเพื่อหลีกเลี่ยงการพล็อตมากเกินไป
aL3xa

@ aL3xa คุณสามารถใช้อัลฟาในแพ็คเกจกราฟิกพื้นฐาน เพียงเพิ่มตัวอย่างcol = rgb(0, 0, 0, 0.6)ในตัวเลือกพล็อต
RobJan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.