geom_text 标签在月轴上的准确放置
accurate placement of geom_text label on a month axis
如何调整 geom_text
使其正常可见?
data <- read.table(text = " months preMonth postMonth preOnc postOnc
1 2017-10-19 958 543 242 657
2 2017-11-19 958 177 242 1023
3 2017-12-19 958 127 242 1073
4 2018-01-19 958 41 242 NA
5 2018-02-19 958 21 242 NA
6 2018-03-19 958 21 242 NA")
dataLong <- data %>% tidyr::gather(Type, Amount, 2:5) %>% filter(!is.na(Amount))
dataLong$delim <- substr(dataLong$Type, 1, 3)
dataLong$Type <- factor(dataLong$Type, levels = c("preOnc", "postOnc", "preMonth", "postMonth"))
dataLong$delim <- factor(dataLong$delim, levels = c('pre', 'pos'))
ggplot(dataLong, aes(x=months, y=Amount, fill=Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col='red',linetype='dashed') +
geom_text(aes(x=months[1], y= 1200 ,label = "Expected: 1200", vjust = -1)) +
facet_grid(. ~ delim, labeller=label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
你想要这个吗?
注意 geom_text()
调用中的 hjust = -1, vjust = -0.5
。
library(tidyverse)
data <- read.table(text = " months preMonth postMonth preOnc postOnc
1 2017-10-19 958 543 242 657
2 2017-11-19 958 177 242 1023
3 2017-12-19 958 127 242 1073
4 2018-01-19 958 41 242 NA
5 2018-02-19 958 21 242 NA
6 2018-03-19 958 21 242 NA")
# the tidyverse (in this case dplyr) case of preparing the data
dataLong <- data %>%
gather(Type, Amount, 2:5) %>%
filter(!is.na(Amount)) %>%
mutate(
delim = substr(Type, 1, 3),
Type = factor(Type, levels = c("preOnc", "postOnc", "preMonth", "postMonth")),
delim = factor(delim, levels = c("pre", "pos")),
months = as.Date(months)
)
ggplot(dataLong, aes(x = months, y = Amount, fill = Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col = "red",linetype = "dashed") +
geom_text(aes(x = months[1], y = 1200, label = "Expected: 1200"),
vjust = -0.5, hjust = -1) +
facet_grid(. ~ delim, labeller = label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
居中替代geom_label
# first compute the middle of the range of months
mid_month <- range(dataLong$months) %>% {(.[2] - .[1]) / 2 + .[1]}
ggplot(dataLong, aes(x = months, y = Amount, fill = Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col = "red",linetype = "dashed") +
# use geom_label and hardcode the parameters
geom_label(x = mid_month, y = 1200, label = "Expected: 1200",
vjust = 0.5, hjust = 0.5, color = "red", inherit.aes = F) +
facet_grid(. ~ delim, labeller = label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
这里没有 inherit.aes = F
,我们也会为图例指定颜色(我们没有)...
如何调整 geom_text
使其正常可见?
data <- read.table(text = " months preMonth postMonth preOnc postOnc
1 2017-10-19 958 543 242 657
2 2017-11-19 958 177 242 1023
3 2017-12-19 958 127 242 1073
4 2018-01-19 958 41 242 NA
5 2018-02-19 958 21 242 NA
6 2018-03-19 958 21 242 NA")
dataLong <- data %>% tidyr::gather(Type, Amount, 2:5) %>% filter(!is.na(Amount))
dataLong$delim <- substr(dataLong$Type, 1, 3)
dataLong$Type <- factor(dataLong$Type, levels = c("preOnc", "postOnc", "preMonth", "postMonth"))
dataLong$delim <- factor(dataLong$delim, levels = c('pre', 'pos'))
ggplot(dataLong, aes(x=months, y=Amount, fill=Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col='red',linetype='dashed') +
geom_text(aes(x=months[1], y= 1200 ,label = "Expected: 1200", vjust = -1)) +
facet_grid(. ~ delim, labeller=label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
你想要这个吗?
注意 geom_text()
调用中的 hjust = -1, vjust = -0.5
。
library(tidyverse)
data <- read.table(text = " months preMonth postMonth preOnc postOnc
1 2017-10-19 958 543 242 657
2 2017-11-19 958 177 242 1023
3 2017-12-19 958 127 242 1073
4 2018-01-19 958 41 242 NA
5 2018-02-19 958 21 242 NA
6 2018-03-19 958 21 242 NA")
# the tidyverse (in this case dplyr) case of preparing the data
dataLong <- data %>%
gather(Type, Amount, 2:5) %>%
filter(!is.na(Amount)) %>%
mutate(
delim = substr(Type, 1, 3),
Type = factor(Type, levels = c("preOnc", "postOnc", "preMonth", "postMonth")),
delim = factor(delim, levels = c("pre", "pos")),
months = as.Date(months)
)
ggplot(dataLong, aes(x = months, y = Amount, fill = Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col = "red",linetype = "dashed") +
geom_text(aes(x = months[1], y = 1200, label = "Expected: 1200"),
vjust = -0.5, hjust = -1) +
facet_grid(. ~ delim, labeller = label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
居中替代geom_label
# first compute the middle of the range of months
mid_month <- range(dataLong$months) %>% {(.[2] - .[1]) / 2 + .[1]}
ggplot(dataLong, aes(x = months, y = Amount, fill = Type)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = 1200, col = "red",linetype = "dashed") +
# use geom_label and hardcode the parameters
geom_label(x = mid_month, y = 1200, label = "Expected: 1200",
vjust = 0.5, hjust = 0.5, color = "red", inherit.aes = F) +
facet_grid(. ~ delim, labeller = label_both) +
scale_fill_manual(values = c("grey", "grey", "seagreen3", "seagreen3")) +
scale_x_date(date_breaks = "1 month", date_labels = "%b-%y")
这里没有 inherit.aes = F
,我们也会为图例指定颜色(我们没有)...