แผนภูมิกระจายพร้อมปัจจัยบนแกนนอน

ฉันกำลังพยายามสร้างพล็อตกระจายอย่างง่ายโดยมีปัจจัยบนแกน x โครงเรื่องที่ได้จะแสดงเส้นแนวนอนแทนที่จะเป็นจุด (ขออภัยไม่สามารถอัปโหลดภาพได้)

การถอดรหัส SAS บางส่วนเป็น R ตามตัวอย่างที่ 3.5 จาก An Introduction to Generalized Linear Models โดย Dobson, Bennett ตามคำขอของอาจารย์ของฉัน จุดประสงค์คือการแนะนำเพื่อนร่วมชั้นให้รู้จักกับ R ดังนั้นฉันจึงพยายามทำให้สิ่งนี้เรียบง่ายและสะอาดตาที่สุดเท่าที่จะเป็นไปได้

dat <- data.frame(age_group = c("30-34", "35-39", "40-44", 
    "45-49", "50-54", "55-59", "60-64", "65-69"), 
                  deaths = c(1, 5, 5, 12, 25, 38, 54, 65), 
                  population = c(17742, 16554, 16059, 13083, 10784, 9645, 10706, 9933))
dat <- within(dat, {
              rate <- deaths / population * 100000
              lograte <- log(deaths / population * 100000)
              })

และโครงเรื่องของฉัน

with(dat, plot(age_group, lograte, pch=19))

ไม่ได้สร้าง 'จุด' ที่ฉันต้องการ ฉันมีวิธีแก้ปัญหาแบบแฮ็กด้วยกัน ซึ่งฉันจะโพสต์ในภายหลัง แต่ต้องการดูว่ามีวิธีที่ดีกว่านี้หรือไม่ ขออภัยอีกครั้งที่ฉันไม่สามารถอัปโหลดภาพได้


person Whitebeard    schedule 09.09.2015    source แหล่งที่มา


คำตอบ (2)


การใช้ฐาน R คุณสามารถทำได้ดังนี้:
กดดันแกน x ด้วย xaxt="n" และเพิ่มในภายหลังด้วยตนเอง

plot(1:nrow(dat), dat$lograte, xaxt="n", xlab="age_group", ylab="lograte", pch=19)
axis(1, at=1:8, labels=dat$age_group)

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

คุณสามารถทำได้โดยใช้ ggplot2 แทนพล็อต R พื้นฐาน:

require(ggplot2)
ggplot(dat, aes(x=age_group, y=lograte)) + geom_point()

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

person Rentrop    schedule 09.09.2015
comment
ขอบคุณสิ่งนี้มีประโยชน์มาก ฉันชอบฐาน R ถ้าเป็นไปได้ แต่นี่เป็นวิธีแก้ปัญหาที่ดี - person Whitebeard; 09.09.2015
comment
@ Floo0: คุณเร็วกว่าฉัน ฉันจะทิ้งคำตอบไว้สำหรับคำอธิบายว่าเหตุใดโค้ดของ Sam จึงให้ผลลัพธ์ที่ไม่คาดคิด - person Stibu; 09.09.2015

plot เป็นฟังก์ชันทั่วไปใน R ซึ่งหมายความว่าขึ้นอยู่กับคลาสของอาร์กิวเมนต์แรก ฟังก์ชันต่างๆ อาจถูกเรียกใช้ เนื่องจากอาร์กิวเมนต์แรกของคุณคือปัจจัย ฟังก์ชันที่เรียกว่าคือ plot.factor จากเอกสารของ plot.factor:

สำหรับตัวเลข y จะใช้ boxplot

ดังนั้น พล็อตแบบกล่องคือสิ่งที่คุณได้รับ หากคุณต้องการหลีกเลี่ยงปัญหานี้ คุณสามารถแปลง age_group เป็นตัวเลขได้:

with(dat, plot(as.numeric(age_group), lograte, pch=19))

นี่อาจจะไม่สร้างแกนที่คุณต้องการ เนื่องจากป้ายกำกับจะรันจาก 1 ถึง 8 คุณสามารถสร้างการลงจุดโดยไม่มีแกน x แล้วเพิ่มแกนด้วยคำสั่งที่สอง:

with(dat, plot(as.numeric(age_group), lograte, pch=19, xaxt = "n", xlab = "age group"))
axis(1, 1:8, dat$age_group)

ฉันได้เพิ่มป้ายกำกับแกนด้วย สิ่งนี้ให้โครงเรื่องต่อไปนี้:

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

person Stibu    schedule 09.09.2015
comment
ขอบคุณสำหรับโครงเรื่องและคำอธิบายเกี่ยวกับ plot.factor สิ่งนี้มีประโยชน์มาก - person Whitebeard; 09.09.2015