【问题标题】:Visualize an ggplot according to a precise range and sampling in R根据 R 中的精确范围和采样可视化 ggplot
【发布时间】:2017-06-28 12:01:34
【问题描述】:

我有如下表格:

 Day    |Date       |Temp1
    ----|-----------|---------------
    1   |9/15/2014  |85         
    2   |9/16/2014  |85          
    3   |9/17/2014  |88         
    4   |9/18/2014  |83            
    ..  |.....      |..          
    871 |6/8/2017   |98

我有很多数据作为日期列,从 2014 年 9 月 15 日到 2017 年 6 月 8 日。我选择在这 6 个月里为 ggplot clean 取值。

这是我的代码:

library(ggplot2)
#library(Rserve)
#Rserve(args = "--vanilla")

Test <- read_csv("C:/Users/..../Desktop/Myfile.csv")

valueDatemax <- max(Test$Date)

valueDatemin <- min(Test$Date)

# Simulate some data
df <- data.frame(Test,
                Test$Date <- seq.Date(from = as.Date(valueDatemin),
                to = as.Date(valueDatemax), 
                by="6 month"))

require(ggplot2)

p<-ggplot(df, aes(x=Test$Date, y=Temp1))

print(p)

但是我有一个我不明白的错误,我尝试了网上所有的解决方案,但我没有找到。

这是错误:

Error in `$<-.data.frame`(`*tmp*`, Date, value = c(-719143, -718962, -718778,  : 
  replacement has 18 rows, data has 871

我希望之后可以选择我的日期范围,例如最后 30 天。

你能帮帮我吗?

谢谢

【问题讨论】:

  • 你为什么在数据框中调用变量dfTest$Date?只需将其命名为 Date,并在您的 aes 调用中直接引用它。
  • 我按照您的建议将Test$Date 替换为Date。但我有大致相同的错误:Error in data.frame(Test, Date &lt;- seq.Date(from = as.Date(valueDatemin), : arguments imply differing number of rows: 871, 18
  • 哪里出错了?在创建df 或绘图时?如果没有可重复的示例,任何人都很难提供帮助。

标签: r ggplot2


【解决方案1】:

似乎Date 被回收了Test 的长度,这导致您挂断。

尝试对您的原始数据框进行子集化,尽管我不确定 Temp1 的来源。

df <-Test[Date==seq.Date(from = as.Date(valueDatemin),
                                       to = as.Date(valueDatemax), 
                                       by="6 month"),]
require(ggplot2)

p<-ggplot(df, aes(x=Date, y=Temp1))

print(p)

如果你想要最后 30 行

tail(df,30)

【讨论】:

    【解决方案2】:

    您遇到了数据导入问题,而不是绘图问题。具体来说:

    1. 您没有提供 CSV 文件的小示例。这使得很难知道您的 CSV 文件实际上是正确的,并且可以按照您调用的函数的预期进行解析。我将假设“Myfile.csv”:

    星期、日期、温度1

    1,2014 年 9 月 15 日,85

    2,2014 年 9 月 16 日,85

    3, 9/17/2014, 88

    4,2014 年 9 月 18 日,83

    5, 9/19/2014, 83

    1. 似乎缺少依赖项:read_csv 文件不在基础 R 中。也许您的意思是 readr::read_csv?我将在本文的其余部分假设这一点。
    2. 关键点是我在这里没有看到任何代码告诉 R 你的第二列是日期。我也看不到有关此日期格式和应如何解析的信息。好好看看readr vignette
    3. 无需使用seq.Date,只需确保您的数据属于“日期”类并调用seq就可以了。

    更正后的代码如下所示:

    library(ggplot2)
    library(readr)
    
    Test <- read_csv(
      "Myfile.csv",
      col_types=list(
        Day=col_integer(),
        Date=col_date("%m/%d/%Y"),
        Temp1=col_integer()
      )
    )
    
    print(class(Test$Date))  # a Date object as expected
    
    valueDatemax <- max(Test$Date)
    valueDatemin <- min(Test$Date)
    
    date <- seq(from = valueDatemin, to = valueDatemax, by="2 days")
    # TODO: change "by" as needed in the final code
    
    Test <- Test[Test$Date %in% date, ] # keep only the desired dates
    
    p <- ggplot(Test, aes(Date, Temp1)) + geom_point()
    print(p)
    

    注意:如果您可以选择日期的表示方式,请选择标准格式,例如 ISO 8601。这将有助于您的任务,因为阅读器将能够自动猜测它正在处理日期。

    【讨论】:

    • 你现在得到了一些答案,@R.Bun。请将其中一个标记为解决方案或澄清您最初的问题。
    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多