在 facet_wrap 中保持度量单位,而 scales="free_y"?
Keeping unit of measure in facet_wrap while scales="free_y"?
我正在尝试创建一个 facet_wrap()
,其中测量单位在不同的地块上保持相同,同时允许在 y 轴上滑动。
为了澄清我的意思,我创建了一个数据集 df
:
library(tidyverse)
df <- tibble(
Year = c(2010,2011,2012,2010,2011,2012),
Category=c("A","A","A","B","B","B"),
Value=c(1.50, 1.70, 1.60, 4.50, 4.60, 4.55)
)
与df
,我们可以使用facet_wrap
创建以下图:
ggplot(data = df, aes(x=Year, y=Value)) + geom_line() + facet_wrap(.~ Category)
地块 1
为了阐明两个图之间的差异,可以使用 scale = "free_y"
:
ggplot(data = df, aes(x=Year, y=Value)) + geom_line()
+ facet_wrap(.~ Category, scale="free_y")
情节 2
虽然更清楚,图A
中y轴的比例等于0.025,而B
中为0.0125。这可能会误导将 A
和 B
相互比较的人。
所以我现在的问题是知道是否存在一种优雅的方式来绘制如下图(y 比例 = 0.025)而不必将两个单独的图绘制到一个网格中?
谢谢
想要的结果:
网格代码:
# Grid
## Plot A
df_A <- df %>%
filter(Category == "A")
plot_A <- ggplot(data = df_A, aes(x=Year, y=Value)) + geom_line() + coord_cartesian(ylim = c(1.5,1.7)) + ggtitle("A")
## Plot B
df_B <- df %>%
filter(Category == "B")
plot_B <- ggplot(data = df_B, aes(x=Year, y=Value)) + geom_line() + coord_cartesian(ylim = c(4.4,4.6)) + ggtitle("B")
grid.arrange(plot_A, plot_B, nrow=1)
根据 Setting individual y axis limits with facet wrap NOT with scales free_y 处的信息,您可以使用 geom_blank()
并通过 Category
手动指定 y 限制:
# df from above code
df2 <- tibble(
Category = c("A", "B"),
y_min = c(1.5, 4.4),
y_max = c(1.7, 4.6)
)
df <- full_join(df, df2, by = "Category")
ggplot(data = df, aes(x=Year, y=Value)) + geom_line() +
facet_wrap(.~ Category, scales = "free_y") +
geom_blank(aes(y = y_min)) +
geom_blank(aes(y = y_max))
我正在尝试创建一个 facet_wrap()
,其中测量单位在不同的地块上保持相同,同时允许在 y 轴上滑动。
为了澄清我的意思,我创建了一个数据集 df
:
library(tidyverse)
df <- tibble(
Year = c(2010,2011,2012,2010,2011,2012),
Category=c("A","A","A","B","B","B"),
Value=c(1.50, 1.70, 1.60, 4.50, 4.60, 4.55)
)
与df
,我们可以使用facet_wrap
创建以下图:
ggplot(data = df, aes(x=Year, y=Value)) + geom_line() + facet_wrap(.~ Category)
地块 1
为了阐明两个图之间的差异,可以使用 scale = "free_y"
:
ggplot(data = df, aes(x=Year, y=Value)) + geom_line()
+ facet_wrap(.~ Category, scale="free_y")
情节 2
虽然更清楚,图A
中y轴的比例等于0.025,而B
中为0.0125。这可能会误导将 A
和 B
相互比较的人。
所以我现在的问题是知道是否存在一种优雅的方式来绘制如下图(y 比例 = 0.025)而不必将两个单独的图绘制到一个网格中?
谢谢
想要的结果:
# Grid
## Plot A
df_A <- df %>%
filter(Category == "A")
plot_A <- ggplot(data = df_A, aes(x=Year, y=Value)) + geom_line() + coord_cartesian(ylim = c(1.5,1.7)) + ggtitle("A")
## Plot B
df_B <- df %>%
filter(Category == "B")
plot_B <- ggplot(data = df_B, aes(x=Year, y=Value)) + geom_line() + coord_cartesian(ylim = c(4.4,4.6)) + ggtitle("B")
grid.arrange(plot_A, plot_B, nrow=1)
根据 Setting individual y axis limits with facet wrap NOT with scales free_y 处的信息,您可以使用 geom_blank()
并通过 Category
手动指定 y 限制:
# df from above code
df2 <- tibble(
Category = c("A", "B"),
y_min = c(1.5, 4.4),
y_max = c(1.7, 4.6)
)
df <- full_join(df, df2, by = "Category")
ggplot(data = df, aes(x=Year, y=Value)) + geom_line() +
facet_wrap(.~ Category, scales = "free_y") +
geom_blank(aes(y = y_min)) +
geom_blank(aes(y = y_max))