ggplot2, y 限制 geom_bar 与分面
ggplot2, y limits on geom_bar with faceting
下面通过选择free_y
,每个刻度的最大值都按预期调整,但是如何让最小值也调整?目前,它们都从 0 开始,而我真的希望上面的面从 99 左右开始到 100,而下面的面从 900 左右开始到 1000。
library(ggplot2)
n = 100
df = rbind(data.frame(x = 1:n,y = runif(n,min=99,max=100),variable="First"),
data.frame(x = 1:n,y = runif(n,min=900,max=1000),variable="Second"))
ggplot(data=df,aes(x,y,fill=variable)) +
geom_bar(stat='identity') +
facet_grid(variable~.,scales='free')
您可以使用 geom_linerange
而不是 geom_bar
。这样做的一般方法是首先为 variable
的每个值找到 y
的 min
,然后将最小值与原始数据合并。代码看起来像:
library(ggplot2)
min_y <- aggregate(y ~ variable, data=df, min)
sp <- ggplot(data=merge(df, min_y, by="variable", suffixes = c("","min")),
aes(x, colour=variable)) +
geom_linerange(aes(ymin=ymin, ymax=y), size=1.3) +
facet_grid(variable ~ .,scales='free')
plot(sp)
情节看起来像:
下面通过选择free_y
,每个刻度的最大值都按预期调整,但是如何让最小值也调整?目前,它们都从 0 开始,而我真的希望上面的面从 99 左右开始到 100,而下面的面从 900 左右开始到 1000。
library(ggplot2)
n = 100
df = rbind(data.frame(x = 1:n,y = runif(n,min=99,max=100),variable="First"),
data.frame(x = 1:n,y = runif(n,min=900,max=1000),variable="Second"))
ggplot(data=df,aes(x,y,fill=variable)) +
geom_bar(stat='identity') +
facet_grid(variable~.,scales='free')
您可以使用 geom_linerange
而不是 geom_bar
。这样做的一般方法是首先为 variable
的每个值找到 y
的 min
,然后将最小值与原始数据合并。代码看起来像:
library(ggplot2)
min_y <- aggregate(y ~ variable, data=df, min)
sp <- ggplot(data=merge(df, min_y, by="variable", suffixes = c("","min")),
aes(x, colour=variable)) +
geom_linerange(aes(ymin=ymin, ymax=y), size=1.3) +
facet_grid(variable ~ .,scales='free')
plot(sp)
情节看起来像: