บังคับให้ R หยุดพล็อตป้ายชื่อแกนแบบย่อ - เช่น 1e + 00 ใน ggplot2


111

ใน ggplot2 ฉันจะหยุดการย่อป้ายแกนได้อย่างไร - เช่น1e+00, 1e+01ตามแกน x เมื่อพล็อตแล้ว ดีฉันต้องการบังคับ R 1,10เพื่อแสดงค่าที่แท้จริงซึ่งในกรณีนี้จะเป็น

ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

คำตอบ:


135

ฉันคิดว่าคุณกำลังมองหาสิ่งนี้:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
สิ่งนี้ได้ผล ขอบคุณ. ไม่น่าสนใจมีตัวเลือก 'label' อะไรอีกบ้างสำหรับแกนใน ggplot2 พร้อมแพ็คเกจเครื่องชั่ง?
JPD

3
โปรดไปที่หน้า ggplot2.org นี้ซึ่งมีประโยชน์มากสำหรับฉันที่มีปัญหาคล้ายกัน
Marta Karas

64

คุณลองทำสิ่งที่ชอบ:

options(scipen=10000)

ก่อนวางแผน?


3
ซึ่งได้ผลโดยการกำหนดโทษที่สูงขึ้นสำหรับการตัดสินใจใช้สัญกรณ์ทางวิทยาศาสตร์ คำอธิบายเพิ่มเติมในคำตอบนี้: stackoverflow.com/a/18600721/1080804
ecoe

35

เป็นเพียงการอัปเดตสิ่งที่ @Arun สร้างขึ้นเนื่องจากฉันได้ลองใช้วันนี้และมันไม่ได้ผลเพราะเป็นจริง

+ scale_x_continuous(labels = scales::comma)

2
คำตอบของ @ Arun น่าจะใช้ได้ดีเหมือนเดิมบางทีคุณอาจละเลยที่จะรวมrequire(scales)? ซึ่งจะนำเข้าแพ็กเกจที่มีcommaมาตราส่วน ตามที่คุณได้ค้นพบคุณยังสามารถระบุแพ็กเกจเมื่ออ้างถึงแทนที่จะต้องระบุไว้ล่วงหน้า
cincodenada

17

คุณสามารถใช้scales::format_formatเพื่อลบสัญกรณ์ทางวิทยาศาสตร์ได้ นอกจากนี้ยังช่วยให้คุณสามารถควบคุมได้มากมายว่าคุณต้องการให้ป้ายกำกับของคุณแสดงอย่างไรซึ่งตรงข้ามกับการscales::commaคั่นด้วยเครื่องหมายจุลภาคของลำดับขนาดเท่านั้น

ตัวอย่างเช่น:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

มีวิธีแก้ปัญหาที่ไม่ต้องใช้ไลบรารีเครื่องชั่ง

คุณสามารถลอง:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

ไม่ใช่วิธีแก้ปัญหาทั่วไปที่ง่ายที่สุดในการกำหนดโทษที่ R ใช้สำหรับสัญกรณ์ทางวิทยาศาสตร์ให้สูงขึ้น?

เช่นตั้งค่าscipen()เป็นตัวเลขที่คุณพอใจ

เช่นถ้าแกนสูงสุดของคุณในแผนภูมิมีแนวโน้มที่จะเป็น 100,000 การตั้งค่าscipen(200000)จะทำให้แน่ใจได้ว่า R (และ ggplot) จะใช้สัญลักษณ์มาตรฐานสำหรับตัวเลขทั้งหมดที่ต่ำกว่า 200,000 และจะไม่มีข้อกำหนดในการเพิ่มบรรทัดใด ๆ ในฟังก์ชัน ggplot


0

การขยายคำถามเดิมให้ประกอบด้วยเศษส่วนเช่น 1, 0.1, 0.01, 0.001 เป็นต้นและหลีกเลี่ยงการลากเลขศูนย์

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.