我想把y軸的標題水平地寫在y軸線的上面同時保持theme()函式中為y軸定義的設定。目的是為了避免浪費空間,同時保持一個漂亮的設計(e.g.與y軸刻度線標簽左對齊的標題)。
可以用theme(axis.title.y = element_text(angle = 0, vjust = 1))開始,但y軸的標題不在行的頂部。
這段代碼洗掉了y軸的標題,同時保留了為grob定義的theme()引數:
library(ggplot2)
library(grid)
p < - ggplot(data = iris, aes(x = Sepal. 長度, y = 花瓣.長度)
主題(axis.title. y = element_text(angle = 0。 vjust = 1),
axis.title.x = element_blank())
# 從ggplot轉換為grob物件。
gp <- ggplotGrob(p)
# 找到與y軸標題相對應的grob并保存其引數。
y.label. grob < - gp$grobs[[which(gp$layout$name == "ylab-l")]]$children
# 從繪圖中洗掉y軸標簽,& 縮小它們所占的空間
gp$grobs[[which(gp$layout$name == "ylab-l")] < - zeroGrob()
gp$widths[_span>gp$layout$l[which(gp$layout$name == "ylab- l")] < -單位(0, "cm")
但是現在我被卡住了,因為我不知道如何使用 uj5u.com熱心網友回復: 你可以把
如果你事先知道標題,你可以使用它的字串寬度。
標籤:grid包中的函式來移動我想要的標題(i.e.在左上角)。
vjust超過1,并調整一下邊距。但很難做到完美的對齊。library(ggplot2)
library(grid)
ggplot(data =iris, aes(x = Sepal. 長度, y = 花瓣.長度)
主題()
plot.margin = margin(t = 30),
axis.title.y = element_text(/span>)
angle = 0, vjust = 1.1,
margin = margin(r =50, t = 5。 5, b = 5.5, l = 5. 5)),
axis.title.x = element_blank()
)

ggplot(data = iris。 aes(x = Sepal. 長度, y = 花瓣.長度)
主題()
plot.margin = margin(t = 30),
axis.title.y = element_text(/span>)
angle = 0, vjust = 1.07,
margin = unit.c()
unit(c(2。 75), "pt"),
unit(-1。 "strwidth", data = "Petal. 長度"),
單位(c(2.75, 2。 75), "pt")
)
),
axis.title.x = element_blank()
)




