Làm cách nào để thay đổi số liệu trục Y thành tỷ lệ phần trăm trong biểu đồ?


107

Làm thế nào chúng ta có thể thay đổi trục y thành phần trăm như hình bên? Tôi có thể thay đổi phạm vi trục y nhưng tôi không thể chuyển nó thành phần trăm. nhập mô tả hình ảnh ở đây

Câu trả lời:


236

Sử dụng:

+ scale_y_continuous(labels = scales::percent)

Hoặc, để chỉ định các tham số định dạng cho phần trăm:

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

(lệnh labels = percentđã lỗi thời kể từ phiên bản 2.2.1 của ggplot2)


3
Tôi thích rằng bạn không cần phải nhập library(scales)cho điều này.
Akshay Bò tót

Và lý do scales::percent(accuracy = 1)không hoạt động là vì các *_format()phiên bản tạo ra một chức năng thay vì ... bất cứ thứ gì percent()một mình tạo ra, điều đó có chính xác không?
MokeEire

61

Về nguyên tắc, bạn có thể chuyển bất kỳ hàm định dạng nào cho labelstham số:

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

Hoặc là

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

Ví dụ có thể lặp lại:

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 để không phụ thuộc bên ngoài. Tôi biết rằng vì Hadley là tác giả của cả ggplot2 và scale, nên điều đó không thực sự quan trọng — nhưng giải pháp này vẫn được đánh giá cao.
Mark White

44

ggplot2scalescác gói có thể làm điều đó:

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)

Có vẻ như stat()tùy chọn đã bị tắt, gây ra thông báo lỗi. Thử cái này:

library(scales)

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

myplot

2

Được mượn từ @Deena ở trên, việc sửa đổi chức năng cho nhãn linh hoạt hơn bạn có thể nghĩ. Ví dụ: tôi có một ggplot trong đó mẫu số của các biến đếm là 140. Do đó, tôi đã sử dụng ví dụ của cô ấy:

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

Điều này cho phép tôi lấy tỷ lệ phần trăm của mình trên mẫu số 140, và sau đó phá vỡ tỷ lệ ở mức tăng 25% thay vì những con số kỳ lạ mà nó mặc định. Chìa khóa ở đây là các khoảng ngắt tỷ lệ vẫn được đặt theo số ban đầu, không phải theo phần trăm của bạn. Do đó, các dấu ngắt phải từ 0 đến giá trị mẫu số, với đối số thứ ba trong "dấu ngắt" là mẫu số chia cho bao nhiêu dấu ngắt nhãn mà bạn muốn (ví dụ: 140 * 0,25 = 35).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.