0

米国連邦準備制度理事会の Web サイトから金利データを取得し、利回り曲線をプロットしようとしています。私はこれを他の多くのものと比較するために使用するつもりであり、長期的に一貫性を保つために、y 軸の同じ​​軸範囲をできるだけ長く、できるだけ多くの国で維持したいと考えています。次のコードscale_y_continuous(limits=c(0,7))またはylim(0,7)その両方でエラーが発生します。私が間違っているかもしれないことについて誰か考えがありますか? ありがとう

library(reshape2)
library(data.tool)
library(ggplot2)

    x =    structure(list(Series.Description = c("2012-07-27", "2012-10-26"
        ), `1.month` = c("0.08", "0.12"), `6.month` = c("0.15", "0.15"
        ), `1.year` = c("0.17", "0.19"), `2.year` = c("0.23", "0.30"), 
            `5.year` = c("0.59", "0.78"), `10.year` = c("1.47", "1.81"
            ), `30.year` = c("2.51", "2.94")), .Names = c("Series.Description", 
        "1.month", "6.month", "1.year", "2.year", "5.year", "10.year", 
        "30.year"), row.names = c(1L, 4L), class = "data.frame")


    # dates as # of days
    z=c(30,182,365,730,1825,3650,10950)
    names(x)[1]="date"
    names(x)[-1]=c(30,182,365,730,1825,3650,10950)
    x=melt(x,id.vars=c(1))
    x$variable=levels(x$variable)[x$variable]
       x$variable=as.numeric(x$variable)

    ggplot(data=x,aes(x=variable,y=value,group=date,linetype=date)) + 
      geom_line(colour="red") + geom_point(colour="red") + 
      scale_x_continuous(breaks=z,labels=c("1M","6M","1Y","2Y","3Y","5Y","10Y")) +
      scale_linetype_manual(values=c(2,1)) + 
      scale_y_continuous(limits=c(0,7))
4

1 に答える 1

5

あなたがそうするならば、あなたstr(x)は何が起こっているかを見るでしょう。

> str(x)
'data.frame':   14 obs. of  3 variables:
 $ date    : chr  "2012-07-27" "2012-10-26" "2012-07-27" "2012-10-26" ...
 $ variable: num  30 30 182 182 365 ...
 $ value   : chr  "0.08" "0.12" "0.15" "0.15" ...

valuemnelがコメントで述べているように、は文字であり、数字ではありません。したがって、value列を数値データ型に変更すると、少なくともプロットする必要があります。それがあなたが望む出力を与えるかどうかは別の問題です。以下のコードは私にとってはうまくいくようです。

library(reshape2)
library(ggplot2)

x =    structure(list(Series.Description = c("2012-07-27", "2012-10-26"
    ), `1.month` = c("0.08", "0.12"), `6.month` = c("0.15", "0.15"
    ), `1.year` = c("0.17", "0.19"), `2.year` = c("0.23", "0.30"),
        `5.year` = c("0.59", "0.78"), `10.year` = c("1.47", "1.81"
        ), `30.year` = c("2.51", "2.94")), .Names = c("Series.Description",
    "1.month", "6.month", "1.year", "2.year", "5.year", "10.year",
    "30.year"), row.names = c(1L, 4L), class = "data.frame")


# dates as # of days
z=c(30,182,365,730,1825,3650,10950)
names(x)[1]="date"
names(x)[-1]=c(30,182,365,730,1825,3650,10950)
x=melt(x,id.vars=c(1))
x$variable=levels(x$variable)[x$variable]
   x$variable=as.numeric(x$variable)
x$value <- as.numeric(x$value)

ggplot(data=x,aes(x=variable,y=value,group=date,linetype=date)) +
  geom_line(colour="red") + geom_point(colour="red") +
  scale_x_continuous(breaks=z,labels=c("1M","6M","1Y","2Y","3Y","5Y","10Y")) +
  scale_linetype_manual(values=c(2,1)) +
  scale_y_continuous(limits=c(0,7))

実際にx軸に沿って一定の間隔でラベルが必要な場合は、に変更して、いじる部分を削除してみscale_x_continuousscale_x_discreteくださいx$variable

x <- structure(list(Series.Description = c("2012-07-27", "2012-10-26"
    ), `1.month` = c("0.08", "0.12"), `6.month` = c("0.15", "0.15"
    ), `1.year` = c("0.17", "0.19"), `2.year` = c("0.23", "0.30"),
        `5.year` = c("0.59", "0.78"), `10.year` = c("1.47", "1.81"
        ), `30.year` = c("2.51", "2.94")), .Names = c("Series.Description",
    "1.month", "6.month", "1.year", "2.year", "5.year", "10.year",
    "30.year"), row.names = c(1L, 4L), class = "data.frame")


# dates as # of days
z <- c(30,182,365,730,1825,3650,10950)
names(x)[1] <- "date"
names(x)[-1] <- c(30,182,365,730,1825,3650,10950)
x <- melt(x, id.vars = c(1))
#x$variable=levels(x$variable)[x$variable]
#   x$variable=as.numeric(x$variable)
x$value <- as.numeric(x$value)

ggplot(data = x, aes(x = variable, y = value, group = date, linetype = date)) +
  geom_line(colour = "red") + geom_point(colour = "red") +
  scale_x_discrete(breaks = z, labels = c("1M","6M","1Y","2Y","3Y","5Y","10Y")) +
  scale_linetype_manual(values = c(2,1)) +
  scale_y_continuous(limits = c(0,7))

これにより、次の出力が得られます。

プロット

少し逸脱しますが、これは非常に単純な問題のようですが、答えが難しくなったため、答えられていません。なぜ答えるのが難しかったのですか?

  1. library(ggplot)上部におよびその他の通話を含めませんでした。
  2. 初期コードで定義されていない関数を含めました。
  3. コードの前ではなく、コードの後に​​構造を定義しました。
  4. エラーメッセージ自体を報告しなかったので、役に立ちました。

これはすべて、人々があなたのコードのコピーをコピーしてRインストールに貼り付けていて、あなたが経験している問題を見る機会を得る前に、さまざまな方法で失敗していたことを意味しました。ここの人々あなたのコードの問題を修正することに興味がありますが、上で概説したような問題をいじりたくないのです。

一方、人々が助けやすいようにすれば、彼らは助けてくれるでしょう。したがって、投稿する前にコードを注意深く見て、コピーし、新しいRセッションを開いて貼り付け、発生したエラーまで機能するかどうかを確認してください。もしそうなら、素晴らしいです、先に進んで質問を投稿してください。そうでない場合は、コードをクリーンアップして再試行してください。これは、SOにあまり良くない質問をいくつか投稿した別の初心者からのアドバイスです。あなたが最小限の再現可能な例をまとめようとしたという事実は、あなたそれを正しくすることに熱心であることを示唆していますが、おそらく投稿する前にもう少し考える必要があります。これは、再検討するのに最適な質問です。

于 2012-12-04T00:53:22.937 に答える