我有以下ggplot:
使用以下脚本生成的:
df_long <- melt(df)
ggplot(df_long, aes(x = variable, y = value)) +
geom_boxplot() +
facet_wrap(~variable, scales = 'free', ncol = 6)
我想将y轴的限制更改为从0开始到每个变量的最大值结束,并为所有变量设置相同的间隔。目前,AC
和ND
很好,因为它们具有相同的间断(它们的标签甚至对齐),但其他变量不同。对于NV
和IC
,它们的结尾不是最大值,并且与AC
和ND
的中断不同。对于PIC
和DBI
,它们的中断与AC
和ND
的中断不同。在其他问题上,我希望所有y轴对齐并看起来优雅。
您知道如何解决该问题吗?
答案 0 :(得分:3)
您需要指定y轴的要求,并使用scale_y_continuous
语句进行设置。
breaks
参数可以是一个从给定数据返回中断的函数,因此您可以设置一个函数,以在其最小值和最大值之间给出一个设置长度的序列。
请注意,这些轴值可能没有多大意义(例如2.09、2.83,...),但是它们在图形上的y位置相同。
所选中断点的值非常不可读,因此我们还可以为labels
参数指定一个函数,该函数将中断作为输入并返回四舍五入的标签。
library(ggplot2)
# generate dummy data
set.seed(2)
df <- data.frame(var = sample(LETTERS[1:4], 1000, replace = T),
val = abs(rnorm(1000)))
df$val[df$var%in%c("B", "D")] <- df$val[df$var%in%c("B", "D")] / 2
head(df)
# actual plotting
my_breaks <- function(x){seq(min(x), max(x), length.out = 5)}
my_labels <- function(x){round(x, digits = 2)}
ggplot(df, aes(x=var,y=val)) + geom_boxplot() + facet_wrap(~var, scales = 'free', ncol = 4) +
scale_y_continuous(breaks = my_breaks, labels = my_labels)
这将输出以下图形
编辑:向轴添加一些约束
如果要将轴限制在特定范围内,则必须使用my_breaks()
函数定义。根据您的评论,我将在下面提供一些示例。
my_breaks <- function(x){seq(0, max(x), length.out = 5)}
my_breaks <- function(x){seq(min(x), min(1, max(x)), length.out = 5)}
我确定您可以找到满足您需求的具体要求;)