เพิ่มจำนวนของการเห็บแกน


191

ฉันกำลังสร้างแปลงสำหรับข้อมูลบางส่วน แต่จำนวนเห็บมีขนาดเล็กเกินไปฉันต้องการความแม่นยำในการอ่านมากขึ้น

มีวิธีใดบ้างที่จะเพิ่มจำนวนของเครื่องหมายแกนใน ggplot2?

ฉันรู้ว่าฉันสามารถบอก ggplot ให้ใช้เวกเตอร์เป็นเครื่องหมายถูกในแกน แต่สิ่งที่ฉันต้องการคือการเพิ่มจำนวนของเห็บสำหรับข้อมูลทั้งหมด กล่าวอีกนัยหนึ่งฉันต้องการคำนวณหมายเลขติ๊กจากข้อมูล

อาจเป็นไปได้ที่ ggplot ทำสิ่งนี้ภายในด้วยอัลกอริทึมบางอย่าง แต่ฉันไม่สามารถหาวิธีที่จะเปลี่ยนแปลงตามสิ่งที่ฉันต้องการ

คำตอบ:


188

คุณสามารถแทนที่ ggplots เครื่องชั่งน้ำหนักเริ่มต้นโดยการปรับเปลี่ยนและscale_x_continuous / หรือ scale_y_continuousตัวอย่างเช่น:

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

ให้สิ่งนี้กับคุณ:

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

และการเอาชนะเครื่องชั่งสามารถให้อะไรแบบนี้กับคุณ:

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

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

หากคุณต้องการเพียงแค่ "ซูม" เข้าในส่วนที่เฉพาะเจาะจงของพล็อตให้ดูที่xlim()และylim()ตามลำดับ ข้อมูลเชิงลึกที่ดีสามารถพบได้ที่นี่เพื่อทำความเข้าใจข้อโต้แย้งอื่น ๆ เช่นกัน


4
ที่จริงแล้วประเด็นก็คือ "สรุป" การbyโต้เถียงในระดับที่แตกต่างกันของตัวเลขเช่น 0.5 เป็นค่าที่ดีสำหรับข้อมูลนี้ซึ่งช่วงคือ c (-3,3) แต่มันไม่ใช่ช่วงที่ดีสำหรับข้อมูลที่ช่วง คือ c (0,5000) มีฟังก์ชั่นที่คำนวณหรือไม่?
João Daniel

3
@ JoãoDaniel - ฉันหมายถึง ggplot ทำงานได้ดีโดยอัตโนมัติ ถ้ามันไม่ได้ให้ผลลัพธ์ที่น่าพอใจฉันไม่แน่ใจว่ามันมีฟังก์ชั่นในตัวที่จะให้อะไรที่แตกต่างออกไป ระดับของรายละเอียดที่คุณต้องการจะเฉพาะเจาะจงกับพล็อตของคุณ แต่อาจจะคิดในกรณีทดสอบและรายละเอียดในระดับที่คุณระบุเพื่อระบุรูปแบบ ... ถ้านี่คือ boxplot สิ่งที่คล้ายmax-min/30กันคือ "bucket" ขนาด ... แต่นั่นอาจจะใช่หรือไม่ใช่จุดเริ่มต้นที่ดีสำหรับคุณ
Chase

4
สิ่งที่เกี่ยวกับค่าเด็ดขาดในแกน x เช่นเดือนของปีสำหรับอนุกรมเวลา
Scott Davis

3
@ScottDavis มีลักษณะที่เชื่อมโยง คุณสามารถใช้scale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel

สำหรับการซูมควรจะนำมาใช้แทนcoord_cartesian stackoverflow.com/questions/25685185/…xlim
qwr

167

ตามความคิดเห็นของ Daniel Krizianคุณยังสามารถใช้pretty_breaksฟังก์ชันจากscalesไลบรารีซึ่งนำเข้าโดยอัตโนมัติ:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

nทั้งหมดที่คุณต้องทำคือการแทรกจำนวนเห็บต้องการสำหรับ


โซลูชันที่มีประโยชน์น้อยกว่าเล็กน้อย (เนื่องจากคุณต้องระบุตัวแปรข้อมูลอีกครั้ง) คุณสามารถใช้prettyฟังก์ชันในตัว:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))

16
นี่เป็นคำตอบที่ชัดเจนที่สุด! Btw ggplot นำเข้าแล้วscalesแต่ไม่ได้เพิ่มฟังก์ชั่นในเนมสเปซของคุณ scales::pretty_breaks(n = 10)คุณจึงสามารถเรียกพวกเขาโดยไม่ต้องนำเข้าเป็น
ในขณะที่

63

คุณสามารถระบุอาร์กิวเมนต์ของฟังก์ชันscaleและ ggplot จะใช้ฟังก์ชันนั้นเพื่อคำนวณตำแหน่งของเห็บ

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))

81
number_ticksไม่จำเป็นต้องสร้างฟังก์ชั่นของตัวเอง pretty_breaks {scales}นี้ได้ถูกนำมาใช้ใน ดังนั้น: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
Daniel Krizian

11
@Daniel Krizian: 1) ต้องการrequire(scales)2) สิ่งนี้ดูเหมือนว่าจะป้องกันการแบ่งของฉันปรากฏในสัญกรณ์ทางวิทยาศาสตร์ดังนั้น 1e6 จึงเปลี่ยนเป็น 1000000 ???
smci

6
คุณสามารถใช้ base R prettyโดยไม่มีscalesแพ็คเกจได้เพียงระบุค่าเป็นอาร์กิวเมนต์ ตัวอย่างเช่น:(breaks=pretty(dat$x, n=10))
Molx

@smci หาก ggplot2 ทำงานแล้วสเกลสามารถใช้ได้ ggplot2 จะไม่ทำงานหากไม่มีสเกล
Claus Wilke

7

เวอร์ชันที่กำลังจะมาถึงของ v3.3.0 ggplot2จะมีตัวเลือกn.breaksในการสร้างตัวแบ่งscale_x_continuousและscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

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

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

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


4

นอกจากนี้

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

ใช้งานได้กับข้อมูลแกน x ที่ปรับขนาดหรือไม่ต่อเนื่อง (เช่นไม่จำเป็นต้องปัดเศษ)

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