0 plot r formula ggplot2 dataframe
我正在尝试将多个数据框放在一个线图中,使用x = index, y = values。我使用的 8 个 data.frames 采用这种格式(索引和值),并且有数百行长:
Values
2306 0.000000
2307 1.004711
Run Code Online (Sandbox Code Playgroud)
因为数据框并不都具有相同的大小,所以我还尝试通过将数据集转换为百分比(索引/值总数)*100 来调整数据集的大小,我应该将其放在绘图代码中还是应该更好在绘图之前转换数据集?
希望 StackOverflow 的 hivemind 能够帮助 R 新手
如果您希望将它们全部放在一个图中,那么最简单的方法是首先“堆叠”数据帧并包含一个列来标识数据来自哪个原始数据帧。
library(dplyr)
library(ggplot2)
Run Code Online (Sandbox Code Playgroud)
首先创建虚假数据。下面的代码创建一个包含八个数据帧的列表。我们假设这是我们读入数据后开始的地方。如果您从单独的文件(例如 csv 文件)中读取数据帧,只需将它们全部读入一个列表中,然后用于bind_rows堆叠它们:
# Fake data
set.seed(954)
df = lapply(paste0("d",0:7), function(x) {
n=sample(seq(100,500,100),1)
data.frame(source=x, index=1:n, values=cumsum(rnorm(n)))
})
# Stack the eight data frames into a single data frame
df = bind_rows(df)
Run Code Online (Sandbox Code Playgroud)
使用 ggplot 进行绘图。我们使用source(原始数据框的名称)作为美感colour:
ggplot(df, aes(index, values, colour=source)) +
geom_line() +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
或者,如果您想index对每个数据帧进行标准化以跨越相同的范围:
ggplot(df %>% group_by(source) %>%
mutate(index = index/max(index)),
aes(index, values, colour=source)) +
geom_line() +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
更新:为了回应您的评论,如果您已经有了数据框,您可以这样做来获取单个数据框:
df=lapply(paste0("sign",1:8), function(x) {
data.frame(source=x, get(x))
})
df=bind_rows(df)
Run Code Online (Sandbox Code Playgroud)
但是您必须在某个时刻将数据读入 R,并且当您将数据文件读入 R 时,您可以处理此类处理。
| 归档时间: |
|
| 查看次数: |
5865 次 |
| 最近记录: |