r - 如何绘制在列上运行循环的折线图?
问题描述
由于我还很新,我正在发展我在 R 上工作的技能。
我有一个包含 n 列和 n 行的数据框。我需要绘制折线图(可能正在使用 ggplot),第一列作为 x 轴(它有年份数据)并为其余列运行循环。我需要 n-1 个用于 n 列的图表。
假设数据框 (df) 有 5 列,其中第 1 列将用于 x 轴,循环应该运行 2 及以后。2:5 列的值将创建线图。每个新列都应形成一个新图表,表示来自受尊敬城市的值。下面提到的数据框,后面是我一直在阅读的代码,类似于数据框。
Year C1 C2 C3 C4
2002 1 8 6 3
2003 5 2 6 5
2004 4 7 8 4
2005 5 1 1 2
我尝试了一些类似于以下的代码,但没有提取任何结果。
for (i in 2:5) {
ggplot(df......)
}
请指导我完成整个过程。
解决方案
你是这个意思吗?
library(ggplot2)
# library(tidyr) # pivot_longer
ggplot(tidyr::pivot_longer(dat, -Year), aes(Year, value, color = name)) +
geom_line()
ggplot2
更喜欢“长”格式的数据。要了解我的意思,请查看以下结果pivot_longer
:
tidyr::pivot_longer(dat, -Year)
# # A tibble: 16 x 3
# Year name value
# <int> <chr> <int>
# 1 2002 C1 1
# 2 2002 C2 8
# 3 2002 C3 6
# 4 2002 C4 3
# 5 2003 C1 5
# 6 2003 C2 2
# 7 2003 C3 6
# 8 2003 C4 5
# 9 2004 C1 4
# 10 2004 C2 7
# 11 2004 C3 8
# 12 2004 C4 4
# 13 2005 C1 5
# 14 2005 C2 1
# 15 2005 C3 1
# 16 2005 C4 2
如果你不想重塑,你必须这样做另一种类似的方式:
gg <- ggplot(dat, aes(x = Year))
for (nm in names(dat)[-1]) {
gg <- gg + geom_line(aes_string(y = nm, color = factor(nm)))
}
print(gg)
(但我建议从宽到长进行重塑。它可以实现的远不止这些。)
(我承认使用for
循环执行此操作的一个优点是您可以手动控制 z 顺序,或者哪个图层“在顶部”。)
推荐阅读
- kubernetes - kubernetes 服务,可以在 3 个不同的节点上使用相同的 Nodeport 值(即 30150)吗?
- android - 构建失败并出现“未定义的引用”
- java - 继续解析 JSON 到 JAVA 的问题
- d3.js - 带有线性回归和置信区间的散点图
- javascript - 打字稿:如何检查一个数组是否不包含另一个数组的值并返回缺失值?
- python - 有没有办法删除列表中的“\n”
- excel - VBA 代码公式中的分号有问题
- javascript - InvalidValueError:setCenter:不是具有有限坐标的 LatLng 或 LatLngLiteral:在属性 lat:NaN 不是可接受的值
- jpa - 坚持集
通过 JPA - c++ - 如何从二维向量数组的特定位置提取元素到特定位置的另一个二维向量数组中