Cập nhật cho ggplot2 2.2.1
Với ggplot2 phiên bản 2, bạn có thể chuyển đổi các vị trí của các nhãn trục và nhãn khía cạnh. Vì vậy, đây là cập nhật mã mà mất lợi thế của các tính năng này:
# Reorder factor levels
diamonds$color = factor(diamonds$color, levels=c("G","F","D","E","I","J","H"))
ggplot(diamonds, aes(carat, ..density..)) +
geom_histogram(binwidth=1) +
facet_grid(color ~ cut, switch="y") + # Put the y facet strips on the left
scale_y_continuous("density", position="right") + # Put the y-axis labels on the right
theme(strip.text.y=element_text(angle=180))
gốc trả lời
Như @joran nói, bạn phải thay đổi các đối tượng lưới nếu bạn muốn toàn quyền kiểm soát những gì đi đâu. Đó là đau đớn.
Đây là một cách tiếp cận khác vẫn là một rắc rối, nhưng dễ dàng hơn (ít nhất là đối với tôi) hơn là sửa đổi đối tượng lưới. Ý tưởng cơ bản là chúng tôi định hướng các nhãn khía cạnh và trục khác nhau sao cho chúng ta có thể xoay âm mưu 90 độ ngược chiều kim đồng hồ (để có được các nhãn khía cạnh ở bên trái) trong khi vẫn có tất cả các nhãn được định hướng đúng cách.
Để thực hiện việc này, bạn cần phải sửa đổi các đồ thị bằng nhiều cách: Lưu ý bổ sung của tôi của coord_flip
, tất cả những thứ theme
, và scale_x_reverse
. Cũng lưu ý rằng tôi đã chuyển thứ tự của các biến thuộc tính, sao cho color
bắt đầu ở trên cùng (nó sẽ ở bên trái sau khi chúng ta xoay biểu đồ).
# Reorder factor levels
diamonds$color = factor(diamonds$color, levels=rev(c("G","F","D","E","I","J","H")))
p <- ggplot(diamonds, aes(carat, ..density..)) +
geom_histogram(binwidth = 1) +
facet_grid(cut ~ color) + coord_flip() +
theme(strip.text.x=element_text(angle=-90),
axis.text.y=element_text(angle=-90, vjust=0.5, hjust=0.5),
axis.text.x=element_text(angle=-90, vjust=0.5, hjust=0),
axis.title.x=element_text(angle=180),
axis.title.y=element_text(angle=-90)) +
scale_x_reverse()
Một tùy chọn là lưu biểu đồ rồi xoay nó trong chương trình khác (chẳng hạn như Xem trước, nếu bạn đang sử dụng máy Mac). Tuy nhiên, với sự giúp đỡ của this SO answer, tôi đã có thể xoay cốt truyện trong R. Nó yêu cầu một số thử nghiệm và lỗi (với kiến thức hạn chế của tôi về cách thao tác các đối tượng lưới) để có được kích thước phù hợp cho khung nhìn. Tôi đã lưu nó dưới dạng PNG để đăng trên SO, nhưng bạn có thể lưu nó dưới dạng PDF, trông đẹp hơn.
png("example.png", 500,600)
pushViewport(viewport(width = unit(8, "inches"), height = unit(7, "inches")))
print(p, vp=viewport(angle=90))
dev.off()
Và đây là kết quả:
(1) Tương tự như những gì bạn đã làm với cắt: xác định thứ tự của các mức độ yếu tố. (2) Bạn thực sự không thể thay đổi trực tiếp đối tượng lưới. – joran