You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言数据行选择与plot绘图ylim参数自动调整技术咨询

R代码自动化调整解决方案

问题1:自动获取数据筛选的上限天数

直接用nrow(datas)代替硬编码的12即可,该函数会自动返回datas数据集的总行数,也就是你需要的最大天数,后续DR列数量变动时无需手动修改。
修改代码如下:

# 替换原 datas<-datas[dif:12,]
datas<-datas[dif:nrow(datas), ]

如果更贴合天数语义,也可以用max(datas$Days)代替nrow(datas),效果完全一致。

问题2:自动适配绘图ylim上限并预留留白

基于Numbers列的最大值按比例预留顶部空间即可,通常预留20%的留白美观度较高,搭配ceiling()函数取整后数值更规整,无需手动指定固定值。
修改代码如下:

# 替换原 plot(Numbers ~ Days, ylim=c(0,40), data = datas)
plot(Numbers ~ Days, ylim=c(0, ceiling(max(datas$Numbers, na.rm = TRUE) * 1.2)), data = datas)

如果需要调整留白比例,修改乘法系数即可,比如需要预留15%留白就改为*1.15。

修改后完整可运行代码

library(dplyr)
library(lubridate)
library(tidyverse)

df1 <- structure(
  list(date1 = c("2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28",
                 "2021-06-28","2021-06-28","2021-06-28"),
       date2 = c("2021-04-02","2021-04-03","2021-04-08","2021-04-09","2021-04-10","2021-07-01","2021-07-02","2021-07-03"),
       Week= c("Friday","Saturday","Thursday","Friday","Saturday","Thursday","Friday","Monday"),
       DR01 = c(34,31,34,33,33,34,33,36), DR02= c(32,21,16,17,13,12,17,14),DR03= c(39,15,14,13,13,12,11,15),
       DR04 = c(35,32,13,13,16,12,11,19),DR05 = c(35,14,15,13,16,12,11,19),
       DR06 = c(32,14,13,13,15,16,17,18),DR07 = c(32,35,34,34,39,34,37,38),
       DR08 = c(0,0,0,11,12,0,0,0),DR09 = c(0,0,12,11,0,0,0,12),DR010 = c(0,0,0,0,0,0,0,0),DR011 = c(0,0,12,0,0,0,0,0), DR012 = c(0,14,0,0,0,0,0,0)),
  class = "data.frame", row.names = c(NA, -8L))


#Generate graph

dmda<-"2021-07-01"

datas<-df1 %>%
  filter(date2 == ymd(dmda)) %>%
  summarize(across(starts_with("DR"), sum)) %>%
  pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
  mutate(name = as.numeric(name))
colnames(datas)<-c("Days","Numbers")


dif <- as.Date(dmda) - as.Date(df1$date1[1]) + 1

# 修改1:自动取最大行数代替硬编码12
datas<-datas[dif:nrow(datas),]

# 修改2:自动计算ylim上限,预留20%留白
plot(Numbers ~ Days, ylim=c(0, ceiling(max(datas$Numbers, na.rm = TRUE) * 1.2)), data = datas)

model <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0), data = datas)

new.data <- data.frame(Days = with(datas, seq(min(Days),max(Days),len = 45)))

lines(new.data$Days,predict(model,newdata = new.data))

内容的提问来源于stack exchange,提问作者user16774617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:48:00