【问题标题】:Plotting rows of a Tibble绘制小标题的行
【发布时间】:2021-06-18 15:23:34
【问题描述】:

我是 R 新手,所以请原谅我。我有一个名为 ycd 的小标题,其中包含我想针对时间绘制的列。我在 tibble 中有一个具有相应日期的列。由于数据不可用,某些列的 NA 直到某个日期。我不想用零填充它,我只希望列的行在数据存在时开始,在数据不存在时保持为空。这是我的呼吁 str(ycd​​):

> str(ycd)
spec_tbl_df [7,808 x 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ Date : chr [1:7808] "1/2/1990" "1/3/1990" "1/4/1990" "1/5/1990" ...
 $ 1 Mo : chr [1:7808] "N/A" "N/A" "N/A" "N/A" ...
 $ 2 Mo : chr [1:7808] "N/A" "N/A" "N/A" "N/A" ...
 $ 3 Mo : num [1:7808] 7.83 7.89 7.84 7.79 7.79 7.8 7.75 7.8 7.74 7.89 ...
 $ 6 Mo : num [1:7808] 7.89 7.94 7.9 7.85 7.88 7.82 7.78 7.8 7.81 7.99 ...
 $ 1 Yr : num [1:7808] 7.81 7.85 7.82 7.79 7.81 7.78 7.77 7.77 7.76 7.92 ...
 $ 2 Yr : num [1:7808] 7.87 7.94 7.92 7.9 7.9 7.91 7.91 7.91 7.93 8.1 ...
 $ 3 Yr : num [1:7808] 7.9 7.96 7.93 7.94 7.95 7.94 7.95 7.95 7.98 8.13 ...
 $ 5 Yr : num [1:7808] 7.87 7.92 7.91 7.92 7.92 7.92 7.92 7.94 7.99 8.11 ...
 $ 7 Yr : num [1:7808] 7.98 8.04 8.02 8.03 8.05 8.05 8 8.01 8.07 8.18 ...
 $ 10 Yr: num [1:7808] 7.94 7.99 7.98 7.99 8.02 8.02 8.03 8.04 8.1 8.2 ...
 $ 20 Yr: chr [1:7808] "N/A" "N/A" "N/A" "N/A" ...
 $ 30 Yr: num [1:7808] 8 8.04 8.04 8.06 8.09 8.1 8.11 8.11 8.17 8.25 ...
 - attr(*, "problems")= tibble [1,006 x 5] (S3: tbl_df/tbl/data.frame)
  ..$ row     : int [1:1006] 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 ...
  ..$ col     : chr [1:1006] "30 Yr" "30 Yr" "30 Yr" "30 Yr" ...
  ..$ expected: chr [1:1006] "a double" "a double" "a double" "a double" ...
  ..$ actual  : chr [1:1006] "N/A" "N/A" "N/A" "N/A" ...
  ..$ file    : chr [1:1006] "'YeildCurve.csv'" "'YeildCurve.csv'" "'YeildCurve.csv'" "'YeildCurve.csv'" ...
 - attr(*, "spec")=
  .. cols(
  ..   Date = col_character(),
  ..   `1 Mo` = col_character(),
  ..   `2 Mo` = col_character(),
  ..   `3 Mo` = col_double(),
  ..   `6 Mo` = col_double(),
  ..   `1 Yr` = col_double(),
  ..   `2 Yr` = col_double(),
  ..   `3 Yr` = col_double(),
  ..   `5 Yr` = col_double(),
  ..   `7 Yr` = col_double(),
  ..   `10 Yr` = col_double(),
  ..   `20 Yr` = col_character(),
  ..   `30 Yr` = col_double()
  .. )

我尝试执行以下操作,但没有成功。


     ggplot(data=ycd) + geom_point(aes(x=ycd$Date,y=ycd$`1 Mo`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`2 Mo`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`3 Mo`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`6 Mo`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`1 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`2 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`3 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`5 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`7 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`10 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`20 Yr`,size=10)) + 
      geom_point(aes(x=ycd$Date,y=ycd$`30 Yr`,size=10)) + 
      geom_smooth(method = "lm", se=FALSE, color="black")

有什么建议吗?我正在考虑将其转换为 data.frame 但我发现它是一个简单的出路。好想学tibble!

数据是在以下位置找到的表格 https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yield 复制并粘贴到 Excel 文档中并使用 read_csv() 读取

【问题讨论】:

  • 请以我们可以运行代码的格式发布您的数据,粘贴来自dput(ycd)的输出。
  • Hye Ricardo,不幸的是,我的数据太大了。但是,我确实包含了链接。我所做的只是将该数据复制并粘贴到 Excel 文档中并调用 read_csv。如果这个问题看起来好像付出了一点努力,我深表歉意。我向你保证,它不适合我。
  • 作为提示,ggplot 处理“长”数据与“宽”数据相比更容易。这个问题的典型方法是重塑你的数据(使用tidyr::pivot_longer 或许多替代方法),然后像ggplot(ycd_long, aes(Date, value, color = name)) + geom_point(size = 10) + geom_smooth(aes(group = 1), se = FALSE, color = "black") 一样将其输入ggplot。相同的结果要短得多。

标签: r plot tidyverse tibble


【解决方案1】:

正如@Jon Spring 所指出的,ggplot 更适用于“长”数据,因此我们应用了tidyr::pivot_longer 函数:

ycd = tidyr::pivot_longer(ycd, -1, values_to="InterestRates", names_to="Duration")

-1 使得第一列(日期)不会被转换。

如果我理解正确,你想为每个组画点,但整个数据只有一个geom_smooth,对吗?如果是,指定geom_smooth 为黑色会覆盖color=Duration,但如果您希望每个持续时间有一个geom_smooth,则只需删除color="black"

ggplot(ycd, aes(x=Date, y=InterestRates, color=Duration)) +
  geom_point(size=10) +
  geom_smooth(method="lm", se=FALSE, color="black")

您还可以使用不同的美学(您在aes() 中输入的参数)来区分这些点,例如shape=...

【讨论】:

    【解决方案2】:

    使用在最后的注释中重复显示的 DF 运行以下。如果需要单独的面板,请省略 facet=NULL。

    library(zoo)
    library(ggplot2)
    
    z <- read.zoo(DF, format = "%m/%d/%Y")
    autoplot(z, facet = NULL) + ggtitle("My Series")
    

    注意

    DF <- data.frame(Date = c("1/2/1990", "1/3/1990", "1/4/1990", "1/5/1990"),
     a = c(NA, 1:3), b = c(3:1, NA))
    

    【讨论】:

    • 谢谢 G. Grothendieck。我在哪里可以了解有关 ggplot 和 autoplot() 函数的更多信息。我很想看到更多的论点
    • 对于autoplot的zoo方法,试试?autoplot.zoo,对于ggplot2,试试help(package = ggplot2)
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 2012-06-03
    • 2020-05-24
    相关资源
    最近更新 更多