如何在堆叠图中使用 scale_color_discrete 格式化图例并在 y 轴 r 中包含千位分隔符
How to format legend using scale_color_discrete in stacked plot and have thousand separators included in the y-axis r
我有这个数据集可以用来格式化图例并在 y 轴上包含千位分隔符;
Data <- tibble::tribble(
~Site, ~Test, ~Score1, ~Score2, ~Score3,
"A", "SD", 5904, 9691, NA,
"B", "SD", 2697, 4484, NA,
"A ", "MB", 11418, 7666, NA,
"B", "MB", 2517, 6445, NA,
"C", "FO", NA, NA, 9588,
"C", "FI", NA, NA, 5423,
"C", "NF", NA, NA, 1527
)
我使用了这个代码;
library(dplyr)
library(tidyr)
library(ggplot2)
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
ylim(0,20000) +
ylab("Total score") +
geom_bar(stat='identity')+
facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
theme_minimal()+
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9))+
scale_color_discrete(name = "Legend",label=c("Score 1","Score 2","Score 3"))
我未能在我的 y 值上正确标记我的图例和千位分隔符。
要获得正确名称的图例,请将 scale_color_discrete
更改为 scale_fill_discrete
。您正在映射到填充美学而不是颜色美学。
要获取 y 标签,您可以添加 scale_y_continuous
和一些参数。您可以 assemble 使标签看起来像您想要的那样。
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
geom_bar(stat='identity')+
facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
theme_minimal()+
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9))+
scale_fill_discrete(name = "Legend", label=c("Score 1","Score 2","Score 3")) +
scale_y_continuous(name = "Total Score",
limits = c(0, 20000),
breaks = seq(0, 20000, 5000),
labels = c(0, paste(seq(5000, 20000, 5000)/1000, "000", sep = ",")))
您唯一需要做的更改是:
ylim(0, 20000)
对于 scale_y_continuous(labels = scales::comma_format())
scale_color_discrete()
对于 scale_fill_discrete()
。
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x = Site, y = value, fill = name, legend = TRUE)) +
scale_y_continuous(labels = scales::comma_format()) +
ylab("Total score") +
geom_bar(stat = 'identity') +
facet_wrap(. ~ Test, scales = 'free_x', ncol = 5, strip.position = "bottom") +
theme_minimal() +
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9)) +
scale_fill_discrete(name = "Legend", label = c("Score 1", "Score 2", "Score 3"))
这是输出:
祝你好运!
我有这个数据集可以用来格式化图例并在 y 轴上包含千位分隔符;
Data <- tibble::tribble(
~Site, ~Test, ~Score1, ~Score2, ~Score3,
"A", "SD", 5904, 9691, NA,
"B", "SD", 2697, 4484, NA,
"A ", "MB", 11418, 7666, NA,
"B", "MB", 2517, 6445, NA,
"C", "FO", NA, NA, 9588,
"C", "FI", NA, NA, 5423,
"C", "NF", NA, NA, 1527
)
我使用了这个代码;
library(dplyr)
library(tidyr)
library(ggplot2)
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
ylim(0,20000) +
ylab("Total score") +
geom_bar(stat='identity')+
facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
theme_minimal()+
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9))+
scale_color_discrete(name = "Legend",label=c("Score 1","Score 2","Score 3"))
我未能在我的 y 值上正确标记我的图例和千位分隔符。
要获得正确名称的图例,请将 scale_color_discrete
更改为 scale_fill_discrete
。您正在映射到填充美学而不是颜色美学。
要获取 y 标签,您可以添加 scale_y_continuous
和一些参数。您可以 assemble 使标签看起来像您想要的那样。
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
geom_bar(stat='identity')+
facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
theme_minimal()+
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9))+
scale_fill_discrete(name = "Legend", label=c("Score 1","Score 2","Score 3")) +
scale_y_continuous(name = "Total Score",
limits = c(0, 20000),
breaks = seq(0, 20000, 5000),
labels = c(0, paste(seq(5000, 20000, 5000)/1000, "000", sep = ",")))
您唯一需要做的更改是:
ylim(0, 20000)
对于scale_y_continuous(labels = scales::comma_format())
scale_color_discrete()
对于scale_fill_discrete()
。
Data %>%
pivot_longer(cols = -c(Site,Test)) %>%
mutate(Test = factor(Test,
levels = c('SD','MB','FI','FO','NF'),
ordered = T)) %>%
ggplot(aes(x = Site, y = value, fill = name, legend = TRUE)) +
scale_y_continuous(labels = scales::comma_format()) +
ylab("Total score") +
geom_bar(stat = 'identity') +
facet_wrap(. ~ Test, scales = 'free_x', ncol = 5, strip.position = "bottom") +
theme_minimal() +
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.background.y = element_blank(),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
strip.text = element_text(face = "bold", size = 9)) +
scale_fill_discrete(name = "Legend", label = c("Score 1", "Score 2", "Score 3"))
这是输出:
祝你好运!