首页 > 解决方案 > 使用 ggplot2 绘制数据框的行

问题描述

我有一个 7obs x 26 变量数据框。观察值(行)是国家,列是年份。但是,年份被写为列名。

我想要做的是创建一个情节,其中年份(列名)作为 X 轴,每个国家作为 Y 轴。所以我要做的是,首先删除带有名称的第一列。

map1 <- map1[-1]

然后绘制:

ggplot(map1, aes(8)) + 
  geom_line(aes(y = 1, colour = "var0")) + 
  geom_line(aes(y = 2, colour = "var1")) +
  geom_line(aes(y = 3, colour = "var0")) + 
  geom_line(aes(y = 4, colour = "var0")) + 
  geom_line(aes(y = 5, colour = "var0")) + 
  geom_line(aes(y = 6, colour = "var0")) + 
  geom_line(aes(y = 7, colour = "var0"))

然而,这给了我一个空图

标签: rggplot2

解决方案


由于 ggplot2 建立在 tidy data 的概念之上,这意味着每一行是一个观察值,每一列是一个变量,最好使用例如重塑您的数据tidyr::pivot_longer

由于您没有提供任何数据,我使用了一些基于数据集的随机数据gapminder

library(gapminder)
library(dplyr)
library(tidyr)
library(ggplot2)

map1_tidy <- map1 %>% 
  tidyr::pivot_longer(-country, names_to = "year", values_to = "value")

ggplot(map1_tidy, aes(year, value, color = country, group = country)) +
  geom_line()

数据

set.seed(42)

map1 <- gapminder[, c("country", "year", "gdpPercap")] %>% 
  tidyr::pivot_wider(names_from = year, values_from = gdpPercap) %>% 
  dplyr::sample_n(10)

推荐阅读