如果你做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" ...
value
是一个字符,而不是数字在他的评论MNEL状态。因此,如果您将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_continuous
到scale_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))
这使下面的输出:
![plot](https://i.stack.imgur.com/cwtoj.png)
要挖我可以指出,这似乎是一个非常简单的问题,但它没有得到回答,因为你很难回答。为什么很难回答?
- 您没有在顶部包括
library(ggplot)
和其他呼叫。
- 您包括在初始代码中未定义的函数。
- 您在代码之后而不是之前定义了结构。
- 你没有报告错误信息本身,这本来是有用的。
所有这些意味着人们正在将你的代码复制并粘贴到他们的R安装中,并且在他们有机会看到你遇到的问题之前,它有多种失败的方式。这里的人对感兴趣,希望解决您的代码问题,但他们不希望混淆上面列出的问题。
另一方面,如果你方便人们提供帮助,他们会提供帮助。因此,在发布之前仔细查看您的代码,复制它,打开一个新的R会话,将其粘贴进去,看看它是否适用于您遇到的错误。如果确实如此,那就太好了,继续并提出问题。如果没有,清理你的代码并重试。这是另一个初学者的建议,他在SO上发布了一些不太好的问题。事实上,你确实试图把一个最小可重现的例子放在一起,这表明你渴望得到它的正确,但可能需要在发布之前做更多的思考。 This是一个很好的问题来重温。
你使用'month','an'和'melt'包什么? – BenBarnes
Hi @BenBarnes,道歉。 'an'是我自己的函数,用'as.numeric'来签约,月份来自'data。表'和融化来自'reshape2' –
如果你的'library()'语句包含在代码中,你的'x'首先定义而不是最后一个,那么我们可以复制和粘贴你的代码。 'sfact'也是你自己的一个功能吗? – SlowLearner