首页 > 解决方案 > 有没有办法指定轴的上限范围?

问题描述

我正在ggplot使用闪亮的应用程序处理 covid 案例的交互式图表。用户可以选择区域以查看新案例。目前,我的 y 轴会根据用户选择的区域中的案例数量进行调整。

我希望 y 轴的下限始终为 0,但 y 轴的上限至少从 50 开始并根据所选数据进行扩展。否则,有少数病例的小城镇有非常高的酒吧,这是不可取的。我知道我可以使用以下设置硬性上限和下限。

scale_y_continuous(limits=c(0,50))

但我需要一些更复杂的东西,比如

scale_y_continuous(limits=c(0,50-400))

这个功能存在吗?谢谢。

标签: rggplot2

解决方案


为什么不在你的renderPlot()函数中定义一个上限,它是50or的最大值max(y_value)?像这样的东西应该可以工作,plot_function()renderPlot()在应用程序中的功能在哪里:

set.seed(1234)
x <- 1:100

df1 <- data.frame(x,y=sample(1:10, 100, replace=TRUE))
df2 <- data.frame(x,y=sample(1:500, 100, replace=TRUE))

plot_function <- function(d) {
  upper_lim <- max(c(50, max(d$y)))
  p <- ggplot(d, aes(x,y)) + geom_point() +
    ylim(0,upper_lim) +
    ggtitle(deparse(substitute(d)))  # prints name of d object
  print(p)
}

比较plot_function()发送时间df1与发送时间的图df2cowplot为清楚起见使用):

library(cowplot)
p1 <- plot_function(df1)
p2 <- plot_function(df2)
plot_grid(p1,p2)

在此处输入图像描述

renderPlot() 函数应该是什么样的?

我开始用另一条评论来回答您的评论,但我认为最好发布对答案的编辑。考虑到您引用了一个函数来返回您的绘图数据框(称为plotdata()),这就是我要尝试的方法。注意upper_lim需要在函数中定义然后用于ggplot()调用。我发现renderPlot()将绘图存储到变量中最简单,然后print()是该绘图:

output$my_plot <- renderPlot({
  upper_lim <- max(c(50, max(plotdata()$y)))
  p <- ggplot(...) + ylim(0, upper_lim)
  print(p)
})

推荐阅读