您可以使用annotate
爲負收入和正收入添加標籤。要在繪圖面板外添加文本,您需要關閉裁剪。下面是內外情節面板添加文本的例子:
# Plot
p = ggplot() +
geom_bar(data = dat1, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
geom_bar(data = dat2, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
scale_fill_brewer(type = "seq", palette = 1) +
geom_hline(yintercept=0, lwd=0.3, colour="grey20") +
scale_x_continuous(breaks=sort(unique(dat$Year))) +
theme_bw()
# Annotate inside plot area
p + coord_cartesian(xlim=range(dat$Year) + c(-0.45,0.4)) +
annotate(min(dat$Year) - 0.53 , y=c(-5000,5000), label=c("Negative Income","Positive Income"),
geom="text", angle=90, hjust=0.5, size=3, colour=c("red","blue"))

# Annotate outside plot area by turning off clipping
pp = p + coord_cartesian(xlim=range(dat$Year) + c(-0.4,0.4)) +
annotate(min(dat$Year) - 0.9, y=c(-6000,10000), label=c("Negative Income","Positive Income"),
geom="text", angle=90, hjust=0.5, size=4, colour=c("red","blue")) +
labs(y="")
pp <- ggplot_gtable(ggplot_build(pp))
pp$layout$clip <- "off"
grid.draw(pp)

您還可以使用cowplot
通過@Gregor的建議。我以前沒有嘗試過,所以也許有比我在下面做的更好的方法,但是它看起來像您必須使用視口座標而不是數據座標來放置註釋。
# Use cowplot
library(cowplot)
ggdraw() +
draw_plot(p + labs(y=""), 0,0,1,1) +
draw_label("Positive Income", x=0.01, y = 0.5, col="blue", size = 10, angle=90) +
draw_label("Negative Income", x=0.01, y = 0.15, col="red", size = 10, angle=90)

我意識到在這個問題中的數據僅僅是爲了說明,但對於這樣的數據,一個線圖可能被證明更容易理解:
library(dplyr)
ggplot(dat, aes(x=Year, y=OperatingIncome, color=Division)) +
geom_hline(yintercept=0, lwd=0.3, colour="grey50") +
geom_line(position=position_dodge(0.2), alpha=0.5) +
geom_text(aes(label=Division), position=position_dodge(0.2), show.legend=FALSE) +
scale_x_continuous(breaks=sort(unique(dat$Year))) +
theme_bw() +
guides(colour=FALSE) +
geom_line(data=dat %>% group_by(Year) %>% summarise(Net=sum(OperatingIncome), Division=NA),
aes(x=Year, y=Net), alpha=0.4) +
geom_text(data=dat %>% group_by(Year) %>% summarise(Net=sum(OperatingIncome), Division=NA),
aes(x=Year, y=Net, label="Net"), colour="black")

或者,如果需要條形圖,可能是這樣的:
ggplot() +
geom_bar(data = dat %>% arrange(OperatingIncome) %>%
mutate(Division=factor(Division,levels=unique(Division))),
aes(x=Year, y=OperatingIncome, fill=Division),
stat="identity", position="dodge") +
geom_hline(yintercept=0, lwd=0.3, colour="grey20") +
theme_bw()

所以你要在兩個地方添加文本在y軸? – rawr
是的(但我也想控制每個y軸標題的開始位置)。 – EntryLevelR
我想補充一點,我想讓y軸上的每個標題獨立於另一個。例如,也許我做一個藍色和一個紅色。 – EntryLevelR