ggplot 和 R:随时间变化的两个变量

发布于 2024-09-13 09:47:58 字数 779 浏览 3 评论 0原文

我想知道如何制作,以便在以下示例数据集中将 x 和 y 绘制在水平轴中框架的每个元素的垂直轴上。我如何使用 ggplot2 做到这一点?

x, y = 变量,frame = YYYYMM

示例数据:

df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
"2", "3", "4", "5", "6", "7"), class = "data.frame")

我已经能够将一个绘制在一条线上,但似乎它没有将我的框架识别为分类的(并非如此,我也不知道如何更改它)至此)。

p <- ggplot(df, aes(x=frame, y=x))
p + geom_line()

I'd like to know how to make it so that x and y, in the following example data set are plotted on the vertical axis for each element of frame in the horizontal axis. How do I do this with ggplot2?

x, y = variables, frame = YYYYMM

Example Data:

df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
"2", "3", "4", "5", "6", "7"), class = "data.frame")

I've been able to get one plotted in a line, but it seems that it's not recognizing my frame as categorical (not that it is, nor do I know how to change it to such).

p <- ggplot(df, aes(x=frame, y=x))
p + geom_line()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我要还你自由 2024-09-20 09:47:58

您需要融化您的数据:

library(reshape2)
dfm = melt(df, id.vars='frame')
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line()

这就是对您的数据框的作用:

> dfm
    frame variable        value
1  200912        x 0.0008923336
2  201001        x 0.0161153932
3  201002        x 0.0188150881
4  201003        x 0.0268699107
5  201004        x 0.0186573307
6  201005        x 0.0101065034
7  201006        x 0.0015441045
8  200912        y 1.3517294883
9  201001        y 0.5965402645
10 201002        y 0.6858350301
11 201003        y 0.7415458982
12 201004        y 1.0965333860
13 201005        y 0.1194482083
14 201006        y 0.1040926429

You need to melt your data:

library(reshape2)
dfm = melt(df, id.vars='frame')
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line()

This is what that does to your data frame:

> dfm
    frame variable        value
1  200912        x 0.0008923336
2  201001        x 0.0161153932
3  201002        x 0.0188150881
4  201003        x 0.0268699107
5  201004        x 0.0186573307
6  201005        x 0.0101065034
7  201006        x 0.0015441045
8  200912        y 1.3517294883
9  201001        y 0.5965402645
10 201002        y 0.6858350301
11 201003        y 0.7415458982
12 201004        y 1.0965333860
13 201005        y 0.1194482083
14 201006        y 0.1040926429
拒绝两难 2024-09-20 09:47:58

这是一个相当晚的答案,但如果您希望您的框架变量解释日期(一年中的月份),那么请将其转换为日期。

然后,您可以使用 scale_x_datescales 包来格式化 x 轴

DF <- melt(df, id.vars = 'frame')
# note that I am arbitrarily setting each month to be the 15th 
# day of the month, to create a complete date 
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d')
library(scales)
ggplot(DF, aes(x =frame, y = value, colour = variable))  +  
 geom_line() + 
 scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months'))

“在此输入图像描述”

This is a rather late answer, but if you want your frame variable intepreted date (month of the year), then convert it to a date.

You can then use scale_x_date and the scales package to format the x-axis

DF <- melt(df, id.vars = 'frame')
# note that I am arbitrarily setting each month to be the 15th 
# day of the month, to create a complete date 
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d')
library(scales)
ggplot(DF, aes(x =frame, y = value, colour = variable))  +  
 geom_line() + 
 scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months'))

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文