【问题标题】:R project: plot data frameR项目:绘图数据框
【发布时间】:2011-04-03 04:57:04
【问题描述】:
9059 2011-02-18                 2.81
9060 2011-02-21                 <NA>
9061 2011-02-22                 2.72
9062 2011-02-23                 2.75
9063 2011-02-24                 2.73
9064 2011-02-25                  2.7
9065 2011-02-28                 2.73
9066 2011-03-01                 2.75
9067 2011-03-02                 2.77
9068 2011-03-03                 2.79
9069 2011-03-04                 2.81
9070 2011-03-07                 2.81
9071 2011-03-08                 2.83
9072 2011-03-09                 2.78
9073 2011-03-10                 2.72
9074 2011-03-11                 2.76
9075 2011-03-14                 2.75
9076 2011-03-15                  2.7

上面是一个名为“mydata”的数据框的sn-p。第一列的名称是 V1,第二列的名称是 V2。第一列包含使用 as.Date() 函数转换的日期。

我想将其绘制在 x-y 网格上,x 轴上为 column-1,y 轴上为 column-2。我尝试了几个小时的各种组合都没有成功。

我试过了

> plot(mydata[,1], mydata[,2])

这会导致 R 控制台挂起,因为它似乎在渲染一些无意义的东西。

【问题讨论】:

  • 看起来您在第 2 列有一个因子,其中数据显示为数字。 str(mydata) 对您的数据有何看法。如果 col 2 是因子,请将其转换为数字:使用 mydata

标签: r plot dataframe


【解决方案1】:

这对我有用(虽然我不知道它是否会产生所需的输出?

usr <- textConnection("9059 2011-02-18                 2.81
9060 2011-02-21                 <NA>
9061 2011-02-22                 2.72
9062 2011-02-23                 2.75
9063 2011-02-24                 2.73
9064 2011-02-25                  2.7
9065 2011-02-28                 2.73
9066 2011-03-01                 2.75
9067 2011-03-02                 2.77
9068 2011-03-03                 2.79
9069 2011-03-04                 2.81
9070 2011-03-07                 2.81
9071 2011-03-08                 2.83
9072 2011-03-09                 2.78
9073 2011-03-10                 2.72
9074 2011-03-11                 2.76
9075 2011-03-14                 2.75
9076 2011-03-15                  2.7")

usr <- read.table(usr, header = FALSE)[-1] #remove the first column

with(usr, plot(V3 ~ V2))

【讨论】:

  • 感谢罗曼!我试过 'with(dat, plot(V2 ~V1)) 但这也失败了。我想做的就是这样一个简单的情节。我可以在 20 秒内在 excel 中完成此操作,但我不想使用 excel,因为它是垃圾。 :-)
  • mydata 有多大? dim(mydata) 说什么?如果您只使用 plot(mydata[1:10,1],mydata[1:10,2]) 尝试前十行怎么办?摘要(mydata)有什么作用?你能画出任何东西(比如,用 plot(runif(100)))吗?
  • 使用 read.zoo 加载数据后(见上文),我运行以下命令:>length(sprd) [1] 9088 我可以绘制它,但现在我遇到了 x 轴的情况标签每 10 年一次。我的数据代表可追溯到 1976 年的 2 年期和 10 年期美国国债之间的利差。我希望 x 轴标签是季度的。知道我怎么能做到这一点吗?我试过 > plot(as.yearqtr(sprd), sprd, type='l') if (del == 0 && to == 0) return(to) 中的错误:需要 TRUE/FALSE 的地方缺少值
  • 你确定你有一个干净的工作空间并尝试了我的示例逐字吗? str(your.object) 说什么?
【解决方案2】:

我做了以下工作:

> x2 <- read.zoo("2_yr_tsy_rate.txt", format="%m/%d/%Y", sep=",", na.strings="ND")
>
> x10 <- read.zoo("10_yr_tsy_rate.txt", format="%m/%d/%Y", sep=",", na.strings="ND")
>
> sprd <- x10 - x2
>
> plot(sprd)

这行得通...但是如果我使用 read.csv 加载数据并尝试更改数据对象,那将是一场噩梦。

现在我有另一个问题。该情节有效,但 x 轴标签每 10 年报告一次。我的数据是可以追溯到 1976 年的利差。我希望 x 轴标签是季度的。我尝试了各种方法,包括以下内容,但出现了错误。

> plot(as.yearqtr(sprd), sprd, type='l')
Error in if (del == 0 && to == 0) return(to) : 
  missing value where TRUE/FALSE needed

这是 str(my object) 的输出

> str(sprd)
‘zoo’ series from 1976-06-01 to 2011-03-31
  Data: num [1:9088] 0.68 0.71 0.7 0.77 0.79 0.79 0.82 0.86 0.83 0.83 ...
  Index: Class 'Date'  num [1:9088] 2343 2344 2345 2346 2349 ...
> 

【讨论】:

  • 尝试将其包装为一个独立的问题。提供一个可重现的例子。
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2018-04-08
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多