在 ggplot2 中用不同的列标记 y 轴
label y axis with a different column in ggplot2
我想使用 ggplot2 创建一个图,其中一个变量作为我的 y 轴,但另一个变量用于 y 轴标签
获取此示例数据:
df <- data_frame(
YearMonth = c("2018-01", "2018-01", "2018-02", "2018-02", "2018-03", "2018-03", "2018-04", "2018-04", "2018-05", "2018-05", "2018-06", "2018-06", "2019-01", "2019-01", "2019-02", "2019-02", "2019-03", "2019-03", "2019-04", "2019-04", "2019-05", "2019-05", "2019-06", "2019-06"),
Year = c("2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019"),
Day = c("1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2"),
Total = c(11, 43, 12, 81, 90, 74, 8, 3, 7, 14, 50, 99, 67, 45, 31, 23, 46, 53, 4, 90, 34, 46, 98, 2),
)
我可以创建一个平铺图,y 轴为“年-月”,x 轴为“日”,“填充”值为“总计”
library(ggplot2)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10)
产生以下结果:
但是,我不想将“年-月”作为我的 y 轴标签。我想使用“年”——它只会在左侧垂直轴上产生两个标签(2018 和 2019)
我咨询过 但没有成功。我曾尝试使用注释,在 scale_y_discrete 中指定“年份”,以及辅助轴,但未能获得预期的结果。我将不胜感激任何关于如何实现这一目标的指导
您可以为刻度提供明确的分隔符和标签,或者提供一个函数来获得您想要的结果。以下代码中的每个示例。我假设您想标记一月。
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
#> Warning: package 'tidyr' was built under R version 4.0.3
#> Warning: package 'dplyr' was built under R version 4.0.3
df <- data.frame(
YearMonth = c("2018-01", "2018-01", "2018-02", "2018-02", "2018-03", "2018-03", "2018-04", "2018-04", "2018-05", "2018-05", "2018-06", "2018-06", "2019-01", "2019-01", "2019-02", "2019-02", "2019-03", "2019-03", "2019-04", "2019-04", "2019-05", "2019-05", "2019-06", "2019-06"),
Year = c("2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019"),
Day = c("1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2"),
Total = c(11, 43, 12, 81, 90, 74, 8, 3, 7, 14, 50, 99, 67, 45, 31, 23, 46, 53, 4, 90, 34, 46, 98, 2)
)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
scale_y_discrete(
breaks = c("2018-01", "2019-01"),
labels = c("2018", "2019")
)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
scale_y_discrete(
breaks = function(x) { x[grepl("-01$", x)] },
labels = function(x) {data.table::tstrsplit(x, "-")[[1]]}
)
由 reprex package (v0.3.0)
于 2020-12-09 创建
你可以试试
df %>%
mutate(YearMonth = str_split(YearMonth, "-") %>% map_chr(2) %>% as.numeric) %>%
mutate(Year = factor(Year, levels = rev(unique(as.numeric(Year))))) %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
coord_equal() +
facet_wrap(~Year,ncol=1, strip.position = "left") +
ylab("") +
theme_bw(base_size = 16) +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank())
我想使用 ggplot2 创建一个图,其中一个变量作为我的 y 轴,但另一个变量用于 y 轴标签
获取此示例数据:
df <- data_frame(
YearMonth = c("2018-01", "2018-01", "2018-02", "2018-02", "2018-03", "2018-03", "2018-04", "2018-04", "2018-05", "2018-05", "2018-06", "2018-06", "2019-01", "2019-01", "2019-02", "2019-02", "2019-03", "2019-03", "2019-04", "2019-04", "2019-05", "2019-05", "2019-06", "2019-06"),
Year = c("2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019"),
Day = c("1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2"),
Total = c(11, 43, 12, 81, 90, 74, 8, 3, 7, 14, 50, 99, 67, 45, 31, 23, 46, 53, 4, 90, 34, 46, 98, 2),
)
我可以创建一个平铺图,y 轴为“年-月”,x 轴为“日”,“填充”值为“总计”
library(ggplot2)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10)
产生以下结果:
但是,我不想将“年-月”作为我的 y 轴标签。我想使用“年”——它只会在左侧垂直轴上产生两个标签(2018 和 2019)
我咨询过
您可以为刻度提供明确的分隔符和标签,或者提供一个函数来获得您想要的结果。以下代码中的每个示例。我假设您想标记一月。
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
#> Warning: package 'tidyr' was built under R version 4.0.3
#> Warning: package 'dplyr' was built under R version 4.0.3
df <- data.frame(
YearMonth = c("2018-01", "2018-01", "2018-02", "2018-02", "2018-03", "2018-03", "2018-04", "2018-04", "2018-05", "2018-05", "2018-06", "2018-06", "2019-01", "2019-01", "2019-02", "2019-02", "2019-03", "2019-03", "2019-04", "2019-04", "2019-05", "2019-05", "2019-06", "2019-06"),
Year = c("2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2018", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019", "2019"),
Day = c("1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2"),
Total = c(11, 43, 12, 81, 90, 74, 8, 3, 7, 14, 50, 99, 67, 45, 31, 23, 46, 53, 4, 90, 34, 46, 98, 2)
)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
scale_y_discrete(
breaks = c("2018-01", "2019-01"),
labels = c("2018", "2019")
)
df %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
coord_equal(ratio = 1) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
scale_y_discrete(
breaks = function(x) { x[grepl("-01$", x)] },
labels = function(x) {data.table::tstrsplit(x, "-")[[1]]}
)
由 reprex package (v0.3.0)
于 2020-12-09 创建你可以试试
df %>%
mutate(YearMonth = str_split(YearMonth, "-") %>% map_chr(2) %>% as.numeric) %>%
mutate(Year = factor(Year, levels = rev(unique(as.numeric(Year))))) %>%
ggplot(aes(x = Day,
y = YearMonth)) +
geom_tile(aes(fill = Total),
colour = "white",
size = 0.2,
na.rm = FALSE) +
scale_fill_gradient2(low = "#F1EDDE",
high = "#C72B26",
midpoint = 10) +
coord_equal() +
facet_wrap(~Year,ncol=1, strip.position = "left") +
ylab("") +
theme_bw(base_size = 16) +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank())