在 ggplot 的 facet wrap plot 中将美元格式添加到一个 plot
Add dollar formatting to one plot in a facet wrap plot in ggplot
我正在尝试使用 scales 包 scales::dollar_format()
将美元格式添加到 facet wrap plot
的单个图 (Sales
)
z <- data.frame(months = month.name, sales = runif(12, min = 3000000, max = 60000000), cases = round(runif(12, min = 100, max = 1000),0)) %>% pivot_longer(!months, names_to = "variable", values_to = "metric")
ggplot(data = z,
aes(x = months, y = metric)) +
geom_bar(stat = 'identity') +
facet_wrap(~ variable, ncol = 1, scales = "free_y")
我试过使用 scale_y_continuous(labels = scales::dollar_format())
但它显然将它添加到两者中。
如何将其仅添加到销售图而不是案例图?
在 vanilla ggplot2 中没有优雅的方法可以做到这一点。在你的特殊情况下,因为你的两个尺度有非常不同的范围,你可以通过提供一个有条件地格式化标签的函数来破解一个解决方案。
library(ggplot2)
library(tidyr)
z <- data.frame(months = month.name, sales = runif(12, min = 3000000, max = 60000000), cases = round(runif(12, min = 100, max = 1000),0)) %>%
pivot_longer(!months, names_to = "variable", values_to = "metric")
p <- ggplot(data = z,
aes(x = months, y = metric)) +
geom_bar(stat = 'identity') +
facet_wrap(~ variable, ncol = 1, scales = "free_y")
p + scale_y_continuous(
labels = ~ if (any(.x > 1e3)) scales::dollar(.x) else .x
)
但是,如果您的情况变得更加复杂,您可以使用 ggh4x::facetted_pos_scales()
为特定面板指定特定比例。 (免责声明:我是 ggh4x 的作者)
p + ggh4x::facetted_pos_scales(y = list(
variable == "sales" ~ scale_y_continuous(labels = scales::dollar_format())
))
由 reprex package (v2.0.1)
于 2022-03-09 创建
我正在尝试使用 scales 包 scales::dollar_format()
将美元格式添加到 facet wrap plot
Sales
)
z <- data.frame(months = month.name, sales = runif(12, min = 3000000, max = 60000000), cases = round(runif(12, min = 100, max = 1000),0)) %>% pivot_longer(!months, names_to = "variable", values_to = "metric")
ggplot(data = z,
aes(x = months, y = metric)) +
geom_bar(stat = 'identity') +
facet_wrap(~ variable, ncol = 1, scales = "free_y")
我试过使用 scale_y_continuous(labels = scales::dollar_format())
但它显然将它添加到两者中。
如何将其仅添加到销售图而不是案例图?
在 vanilla ggplot2 中没有优雅的方法可以做到这一点。在你的特殊情况下,因为你的两个尺度有非常不同的范围,你可以通过提供一个有条件地格式化标签的函数来破解一个解决方案。
library(ggplot2)
library(tidyr)
z <- data.frame(months = month.name, sales = runif(12, min = 3000000, max = 60000000), cases = round(runif(12, min = 100, max = 1000),0)) %>%
pivot_longer(!months, names_to = "variable", values_to = "metric")
p <- ggplot(data = z,
aes(x = months, y = metric)) +
geom_bar(stat = 'identity') +
facet_wrap(~ variable, ncol = 1, scales = "free_y")
p + scale_y_continuous(
labels = ~ if (any(.x > 1e3)) scales::dollar(.x) else .x
)
但是,如果您的情况变得更加复杂,您可以使用 ggh4x::facetted_pos_scales()
为特定面板指定特定比例。 (免责声明:我是 ggh4x 的作者)
p + ggh4x::facetted_pos_scales(y = list(
variable == "sales" ~ scale_y_continuous(labels = scales::dollar_format())
))
由 reprex package (v2.0.1)
于 2022-03-09 创建