tôi muốn cung cấp một giải pháp thay thế, một giải pháp mạnh mẽ tương tự như những gì tôi sắp đề xuất được yêu cầu trong phiên bản mới nhất của ggtern, kể từ khi giới thiệu tính năng xoay khung hình. Về cơ bản, bạn cần phải xác định vị trí tương đối bằng cách sử dụng lượng giác, bằng cách xây dựng một hàm trả về đối tượng element_text
, cho góc (tức là độ) và vị trí (tức là một trong x, y, trên hoặc bên phải).
#Load Required Libraries
library(ggplot2)
library(gridExtra)
#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
angle = angle[1];
position = position[1]
positions = list(x=0,y=90,top=180,right=270)
if(!position %in% names(positions))
stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
if(!is.numeric(angle))
stop("'angle' must be numeric",call.=FALSE)
rads = (angle - positions[[ position ]])*pi/180
hjust = 0.5*(1 - sin(rads))
vjust = 0.5*(1 + cos(rads))
element_text(angle=angle,vjust=vjust,hjust=hjust)
}
Thành thật mà nói, theo ý kiến của tôi, tôi nghĩ rằng một tùy chọn 'auto' nên được cung cấp trong ggplot2
cho hjust
và vjust
lập luận, khi xác định góc, dù sao, cho phép thể hiện cách thức hoạt động trên.
#Demonstrate Usage for a Variety of Rotations
df = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
ggplot(df,aes(x,y)) +
geom_point() +
theme(axis.text.x = rotatedAxisElementText(a,'x'),
axis.text.y = rotatedAxisElementText(a,'y')) +
labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)
nào sản xuất như sau:
Trong phiên bản mới nhất của ggplot2, lệnh sẽ là: 'q + chủ đề (axis.text.x = element_text (angle = -90, hjust = 0))' – rnorberg
'element_text' không còn tồn tại, trừ khi nó không có trong gói ggplot2 ... – naught101
Đối với những người không hoạt động như mô tả ở đây, hãy thử 'theme (axis.text.x = element_text (angle = 90, vjust = 0.5))'. Theo ggplot2 0.9.3.1, điều này có vẻ là giải pháp. – lilster