3

我正在尝试使用 ggplot 控制条形图中 y 轴的范围。对于此图,我想将 y 轴原点设置为 1,而不是 ggplot2 默认设置为 0。

对于此示例,假设我想绘制范围从 1 到 7 的中值,并且我想设置 y 轴的范围。(一个工作示例如下所示)。

如果我只是使用 geom_bar 创建条形图,y 轴的原点会自动设置为零。

如果我使用 scale_y_continuous(limits=c(1,7)) 设置 y 轴的限制,则不会绘制条形图。

如果我使用 scale_y_continuous(limits=c(1,7), oob=rescale_none),y 轴的范围从 1 到 7,但它就像条形图从零开始绘制,使得绘图在美学上并不理想(有不是条形图和图表底部边框之间的边距。

这是一个工作示例(抱歉缺少图表;由于我的声誉不足,我不允许发布它们):

library(ggplot2)
library(scales)

# Creating "dataset"
dt <- data.frame(a=c("A", "B", "C"),
                 b=c(3, 5, 1))

# Default y-axis range, internaly set by ggplot
ggplot(dt, aes(x=a, y=b)) + theme_bw() +
  geom_bar(stat="identity")


# Simply using 'limits'. Breaks expected in y=c(1,3,5,7)
# Bars not graphed
ggplot(dt, aes(x=a, y=b)) + theme_bw() +
  geom_bar(stat="identity") + 
  scale_y_continuous(limits=c(1,7), breaks=c(1,3,5,7))


# Using 'oob' from package:scales
# Bars are shown, breaks in the right place, 
# but bars start running from y=0 (not beautiful)
ggplot(dt, aes(x=a, y=b)) + theme_bw() +
  geom_bar(stat="identity") + 
  scale_y_continuous(limits=c(1,7), breaks=c(1,3,5,7), oob=rescale_none)
4

0 回答 0