我想在图形和列上的红线中添加标签。 我设法将标签添加到列或行中,但是我不能同时做这两项。
有人可以帮忙吗?
测试数据框
ebit ebit_margin year
Company1 2421 0.054 2019
Company1.1 1928 0.049 2018
Company1.2 1915 0.050 2017
Company1.3 2135 0.060 2016
Company1.4 1534 0.041 2015
数据
test <- structure(list(ebit = c(2421.459, 1928.349,
1914.744, 2134.6, 1534.048), ebit_margin = c(0.05367, 0.04859,
0.04973, 0.06016, 0.04143), year = structure(5:1, .Label = c("2015",
"2016", "2017", "2018", "2019"), class = "factor")), class = "data.frame", row.names = c("Company1",
"Company1", "Company1", "Company1",
"Company1"))
代码
scaleFactor <- max(test$ebit) / max(test$ebit_margin)
ggplot(test, aes(as.factor(year), ebit, label=test$ebit)) +
geom_col(width = 0.5, fill = "darkblue", alpha = 0.5) +
geom_line(aes(as.factor(year), ebit_margin * scaleFactor, group = 1), size = 1, col = "red", alpha = 0.5) +
scale_y_continuous(name = "EBIT Value", sec.axis = sec_axis(~./scaleFactor, name = "EBIT Margin", labels = function(b) { paste0(round(b * 100, 3), "%")})) +
#geom_text(size = 3, position = position_stack(vjust = 0.5)) +
theme_bw() +
labs(title = "Key Financials Across Years",
subtitle = "Earnings Before Interest and Taxation",
x = "Year") +
theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
geom_label(
label = c(test$ebit),
position = position_stack(vjust = 0.75),
check_overlap = T
)
到目前为止,我设法做到的是:
答案 0 :(得分:3)
您需要再添加一个geom_label
和y
美观的第二个label
:
ggplot(test, aes(as.factor(year), ebit, label=test$ebit)) +
geom_col(width = 0.5, fill = "darkblue", alpha = 0.5) +
geom_line(aes(as.factor(year), ebit_margin * scaleFactor, group = 1),
size = 1, col = "red", alpha = 0.5) +
scale_y_continuous(name = "EBIT Value",
sec.axis = sec_axis(~./scaleFactor,
name = "EBIT Margin",
labels = function(b) {
paste0(round(b * 100, 3), "%")})) +
theme_bw() +
labs(title = "Key Financials Across Years",
subtitle = "Earnings Before Interest and Taxation",
x = "Year") +
theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
geom_label(
aes(label = ebit),
position = position_stack(vjust = 0.75),
check_overlap = T
) +
geom_label(
aes(label = ebit_margin * 100, y = ebit_margin * scaleFactor),
colour = "red"
)
答案 1 :(得分:1)
只需添加
geom_label(
aes(as.factor(year), ebit_margin * scaleFactor, group = 1),
label = c(test$ebit),
position = position_stack(vjust = 0.99),
check_overlap = T
)
您的结果将是
ggplot(test, aes(as.factor(year), ebit, label=test$ebit)) +
geom_col(width = 0.5, fill = "darkblue", alpha = 0.5) +
geom_line(aes(as.factor(year), ebit_margin * scaleFactor, group = 1), size = 1, col = "red", alpha = 0.5) +
scale_y_continuous(name = "EBIT Value", sec.axis = sec_axis(~./scaleFactor, name = "EBIT Margin", labels = function(b) { paste0(round(b * 100, 3), "%")})) +
#geom_text(size = 3, position = position_stack(vjust = 0.5)) +
theme_bw() +
labs(title = "Key Financials Across Years",
subtitle = "Earnings Before Interest and Taxation",
x = "Year") +
theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
geom_label(
label = c(test$ebit),
position = position_stack(vjust = 0.75),
check_overlap = T
)+
geom_label(
aes(as.factor(year), ebit_margin * scaleFactor, group = 1),
label = c(test$ebit),
position = position_stack(vjust = 0.99),
check_overlap = T
)