ฉันจะเปลี่ยนตัวเลขแกน Y เป็นเปอร์เซ็นต์ใน barplot ได้อย่างไร


110

เราจะเปลี่ยนแกน y เป็นเปอร์เซ็นต์เหมือนรูปได้อย่างไร? ฉันเปลี่ยนช่วงแกน y ได้ แต่ไม่สามารถเปลี่ยนเป็นเปอร์เซ็นต์ได้ ป้อนคำอธิบายภาพที่นี่

คำตอบ:


239

ใช้:

+ scale_y_continuous(labels = scales::percent)

หรือเพื่อระบุพารามิเตอร์การจัดรูปแบบสำหรับเปอร์เซ็นต์:

+ scale_y_continuous(labels = scales::percent_format(accuracy = 1))

(คำสั่งlabels = percentล้าสมัยตั้งแต่เวอร์ชัน 2.2.1 ของ ggplot2)


3
ฉันชอบที่คุณไม่จำเป็นต้องพิมพ์library(scales)สำหรับสิ่งนี้
Akshay Gaur

และเหตุผลที่ใช้scales::percent(accuracy = 1)ไม่ได้เป็นเพราะ*_format()เวอร์ชันสร้างฟังก์ชันแทน ... สิ่งที่percent()สร้างขึ้นเพียงอย่างเดียวถูกต้องหรือไม่?
MokeEire

65

โดยหลักการแล้วคุณสามารถส่งผ่านฟังก์ชันการฟอร์แมตไปยังlabelsพารามิเตอร์:

+ scale_y_continuous(labels = function(x) paste0(x*100, "%")) # Multiply by 100 & add %  

หรือ

+ scale_y_continuous(labels = function(x) paste0(x, "%")) # Add percent sign 

ตัวอย่างที่ทำซ้ำได้:

library(ggplot2)
df = data.frame(x=seq(0,1,0.1), y=seq(0,1,0.1))

ggplot(df, aes(x,y)) + 
  geom_point() +
  scale_y_continuous(labels = function(x) paste0(x*100, "%"))

8
+1 โดยไม่มีการพึ่งพาภายนอก ฉันรู้ว่าเนื่องจาก Hadley เป็นผู้เขียนทั้ง ggplot2 และเครื่องชั่งน้ำหนักจึงไม่น่าจะสำคัญนัก แต่โซลูชันนี้ยังคงได้รับการชื่นชม
Mark White

44

ggplot2และscalesแพ็คเกจสามารถทำได้:

y <- c(12, 20)/100
x <- c(1, 2)

library(ggplot2)
library(scales)
myplot <- qplot(as.factor(x), y, geom="bar")
myplot + scale_y_continuous(labels=percent)

ดูเหมือนว่าstat()ตัวเลือกถูกถอดออกทำให้เกิดข้อความแสดงข้อผิดพลาด ลองสิ่งนี้:

library(scales)

myplot <- ggplot(mtcars, aes(factor(cyl))) + 
          geom_bar(aes(y = (..count..)/sum(..count..))) + 
          scale_y_continuous(labels=percent)

myplot

3

ยืมมาจาก @Deena ด้านบนการปรับเปลี่ยนฟังก์ชั่นสำหรับป้ายกำกับมีประโยชน์มากกว่าที่คุณคิด ตัวอย่างเช่นฉันมี ggplot ที่ตัวส่วนของตัวแปรที่นับคือ 140 ฉันใช้ตัวอย่างของเธอดังนี้:

scale_y_continuous(labels = function(x) paste0(round(x/140*100,1), "%"), breaks = seq(0, 140, 35))

สิ่งนี้ทำให้ฉันได้เปอร์เซ็นต์ของฉันบนตัวส่วน 140 จากนั้นก็แบ่งมาตราส่วนทีละ 25% แทนที่จะเป็นตัวเลขแปลก ๆ ที่มันผิดนัด สิ่งสำคัญคือการแบ่งมาตราส่วนยังคงกำหนดโดยการนับเดิมไม่ใช่เปอร์เซ็นต์ของคุณ ดังนั้นตัวแบ่งจะต้องมีค่าจากศูนย์ถึงค่าตัวส่วนโดยอาร์กิวเมนต์ที่สามใน "ตัวแบ่ง" เป็นตัวหารหารด้วยตัวแบ่งป้ายจำนวนเท่าใดก็ได้ที่คุณต้องการ (เช่น 140 * 0.25 = 35)

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