2017-07-27 15 views
6

Tôi muốn nhân đôi trục Y bên trái trên ô ggplot2 ở bên phải và sau đó thay đổi nhãn đánh dấu cho trục rời rạc (phân loại).Sao chép (và sửa đổi) trục rời rạc trong ggplot2

Tôi đã đọc câu trả lời cho this question, tuy nhiên như có thể thấy on the package's repo page, các switch_axis_position() chức năng đã bị xóa khỏi gói cowplot (tác giả trích dẫn (sắp xuất bản?) Chức năng có nguồn gốc trong ggplot2).

Tôi đã xem trang reference trên trục phụ trong ggplot2, tuy nhiên tất cả các ví dụ trong tài liệu đó sử dụng scale_y_continuous thay vì scale_y_discrete. Và, thực sự, khi tôi cố gắng sử dụng chức năng rời rạc, tôi nhận được lỗi:

Error in discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", : 
unused argument (sec.axis = <environment>) 

Có cách nào để làm điều này với ggplot2? Ngay cả một giải pháp hoàn toàn bị tấn công cũng đủ cho tôi. Cảm ơn trước. (MRE dưới đây)

library(ggplot2) 

# Working continuous plot with 2 axes 
ggplot(mtcars, aes(cyl, mpg)) + 
    geom_point() + 
    scale_y_continuous(sec.axis = sec_axis(~.+10)) 


# Working discrete plot with 1 axis 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() 


# Broken discrete plot with 2 axes 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() + 
    scale_y_discrete(sec.axis = sec_axis(~.+10)) 
+0

xem nguồn của 'scale_y_discrete' không có tùy chọn/đối số để chỉ định trục phụ. Vì vậy, bất kỳ giải pháp có lẽ sẽ phải là một hack. – SymbolixAU

Trả lời

6

Lấy yếu tố rời rạc của bạn và biểu thị bằng số. Sau đó, bạn có thể nhân bản nó và gắn nhãn lại là các yếu tố thay vì số.

library(ggplot2) 

irislabs1 <- levels(iris$Species) 
irislabs2 <- c("foo", "bar", "buzz") 

ggplot(iris, aes(Sepal.Length, as.numeric(Species))) + 
    geom_point() + 
    scale_y_continuous(breaks = 1:length(irislabs1), 
        labels = irislabs1, 
        sec.axis = sec_axis(~., 
             breaks = 1:length(irislabs2), 
             labels = irislabs2)) 

Sau đó, fiddle với đối số expand = khi cần để bắt chước chặt chẽ quy mô rời rạc mặc định.

enter image description here

+1

theo ggplot trợ giúp "Các giá trị mặc định là c (0,05, 0) cho các biến liên tục, và c (0, 0,6) cho các biến rời rạc." cho tôi mở rộng = c (0,0.6) đã cho kết quả thực sự tốt đẹp – TobiO

Các vấn đề liên quan