【问题标题】:Enter a point's value on the graph在图表上输入一个点的值
【发布时间】:2021-09-27 00:54:37
【问题描述】:

下面的代码生成一个带有点和线的图形。此外,它在轴上还有一个红点。我想在图表上以红色输入与该点对应的值。我该怎么做?

谢谢!

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(14,11,14,13,13,14,13,16), DR02= c(14,12,16,17,13,12,17,14),DR03= c(19,15,14,13,13,12,11,15),
       DR04 = c(15,14,13,13,16,12,11,19),DR05 = c(15,14,15,13,16,12,11,19),
       DR06 = c(21,14,13,13,15,16,17,18),DR07 = c(12,15,14,14,19,14,17,18)),
  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")

plot(Numbers ~ Days, xlim=c(0,8), ylim=c(0,20), data = datas,xaxs='i')
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)))
new.data <- rbind(0, new.data)
lines(new.data$Days, predict(model, newdata=new.data))
points(0, coef(model)[2], col="red", pch=19, cex=1.2, xpd=TRUE)

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为@Vinícius Félix 的text 建议是正确的。要使 y 位置动态,您可以使用coef(model)[2] + 1

    plot(Numbers ~ Days, xlim=c(0,8), ylim=c(0,20), data = datas,xaxs='i')
    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)))
    new.data <- rbind(0, new.data)
    lines(new.data$Days, predict(model, newdata=new.data))
    tmp <- coef(model)[2]
    points(0, tmp, col="red", pch=19, cex=1.2, xpd=TRUE)
    
    text(.5,tmp + 1,round(tmp,2))
    

    【讨论】:

    【解决方案2】:

    您可以使用函数text

    plot(Numbers ~ Days, xlim=c(0,8), ylim=c(0,20), data = datas,xaxs='i')
    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)))
    new.data <- rbind(0, new.data)
    lines(new.data$Days, predict(model, newdata=new.data))
    points(0, coef(model)[2], col="red", pch=19, cex=1.2, xpd=TRUE)
    

    文字

    text(.2,13,round(coef(model)[2],2))
    

    传说

    另一种方法是使用legend

    legend(
      "bottomright",
      legend = round(coef(model)[2],2),
      col = "red",
      pch = 20,
      bty = "n"
    )
    

    【讨论】:

    • Vinicius 感谢您的回复!这或多或少是对的。但是,如果我从 dmda 更改为 03/07,例如,红点值在错误的位置。 text 函数必须以某种方式理解在哪里插入文本,这样我就不会一直改变位置。
    • 我明白了。自从我上次使用 base R 做图形已经有一年了,所以我忘记了大部分内容,但我只记得函数 legend,看看它是否适合你 @JSouza
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多