【问题标题】:Create line graph with multiple lines in R在 R 中创建具有多条线的折线图
【发布时间】:2020-04-06 04:59:33
【问题描述】:

我想绘制人口普查数据以比较每个种族多年来的数据。

我的数据框将 1950-2010 年(每 10 年)作为行,将种族作为列。横截面的数据是给定年份该种族的百分比。

我希望我的折线图在 x 轴上绘制年份,在 y 轴上绘制种族。因此,对于我的 5 个“种族”变量,将有 5 条不同颜色的线都绘制在同一张图上。

我曾尝试观看视频并在这里到处搜索,但我发现似乎没有任何东西能按我想要的方式工作。

编辑: 我重构了代码并构建了自己的数据框,而不是让它返回一个矩阵。

但是,我希望右侧说“Race”,然后有我的 5 行。我正在努力让一条线在其他 4 条之前显示出来。

new dataframe returned plot

编辑: 到目前为止,我已经在我的代码中弄清楚了 - Allston <- ggplot(data = dataAllston, aes(Year, White.pct, group = 1)) + geom_point(aes(color = "orange")) + geom_line(aes(color = "orange"))

我想以 0.2 为增量从 0-1 缩放 Y 轴,并将 Y 设为“Race”而不是单独的标签。不仅仅是重新标记——我希望图表能够代表实际的增加/减少,而不是像现在这样斜向下的直线。

我认为学习如何制作可重现的代码比进行调整需要更长的时间。

new returned plot

编辑:

dput(dataAllston)

返回

structure(list(Year = c(1950, 1960, 1970, 1980, 1990, 2000, 2010
), White.pct = structure(7:1, .Label = c("57.0", "59.0", "63.0", 
"78.0", "90.8", "98.0", "98.3"), class = "factor"), BlackOrAA.pct = 
structure(c(2L, 
1L, 3L, 4L, 5L, 4L, 4L), .Label = c("1.20", "1.30", "2.60", "5.00", 
"9.00"), class = "factor"), Hispanic.pct = structure(c(1L, 1L, 
3L, 4L, 2L, 2L, 2L), .Label = c("0.00", "13.0", "3.10", "6.00"
), class = "factor"), AsianOrPI.pct = structure(c(1L, 1L, 5L, 
6L, 2L, 3L, 4L), .Label = c("0.00", "14.0", "18.0", "20.0", "3.20", 
"9.00"), class = "factor"), Other.pct = structure(c(2L, 1L, 3L, 
4L, 5L, 4L, 4L), .Label = c("1.20", "1.30", "2.60", "5.00", "9.00"
), class = "factor")), class = "data.frame", row.names = c(NA, 

-7L))

result from dput(data)

【问题讨论】:

标签: r ggplot2 graph linegraph census


【解决方案1】:

您首先需要使用 tidyr 中的 pivot_longer 函数将数据集重新整形为更长的格式。最后,您的数据应如下所示。

由于您的数据采用因子格式(年份列除外),因此第一行会将所有数据转换为非常适合绘图的数字格式。

library(dplyr)
library(tidyr)

Reshaped_DF <- df %>% mutate_at(vars(ends_with(".pct")), ~as.numeric(as.character(.))) %>%
   pivot_longer(-Year, names_to = "Races", values_to = "values")

# A tibble: 35 x 3
    Year Races         values
   <dbl> <chr>          <dbl>
 1  1950 White.pct       98.3
 2  1950 BlackOrAA.pct    1.3
 3  1950 Hispanic.pct     0  
 4  1950 AsianOrPI.pct    0  
 5  1950 Other.pct        1.3
 6  1960 White.pct       98  
 7  1960 BlackOrAA.pct    1.2
 8  1960 Hispanic.pct     0  
 9  1960 AsianOrPI.pct    0  
10  1960 Other.pct        1.2
# … with 25 more rows

然后,您可以通过以下方式在ggplot2 中绘制它:

library(ggplot2)

ggplot(Reshaped_DF,aes(x = Year, y = values, color = Races, group = Races))+
  geom_line()+
  geom_point()+
  ylab("Percentage")

它回答了你的问题吗?

如果没有,请考虑提供一个可重现的数据集示例,以便人们轻松复制/粘贴。请参阅本指南:How to make a great R reproducible example

【讨论】:

  • 我就是这么做的(当然是把 df 重命名为我的 dataFrame)并得到“错误:Year White.pct > 没有通用类型。”跨度>
  • 感谢您的帮助 - 我不确定我的代码是否可重现,因为我必须计算出各个值。你的意思是提供我的数据框是如何创建的,直到我如何绘制它?
  • 谢谢,刚刚更新——没有看到你的其他评论。我是 Stack 新手,不习惯到处乱跳哈哈。
  • 我非常感谢您的耐心等待...整个论坛在编码之上的事情确实是一个学习曲线。
  • 现在好多了;)检查我编辑的答案。你现在应该让它工作。别担心,你也会在一天之内得到使用,只需花时间阅读人们提供的所有链接,它们是非常有用的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多