【问题标题】:Plot multiple scatter graph using certain range of columns as x axis使用特定范围的列作为 x 轴绘制多个散点图
【发布时间】:2025-12-13 08:10:01
【问题描述】:

我有一个如下图的数据框:

此数据保存为变量“filterWage”。

此数据框包含 Country.Code、Series.Code 列和从 X1992 到 X2016 的列范围(请注意,我无法将整个 X1992 列放入 X2016 列,因此图像上最多显示 x2003) .

目标是使用 ggplot 将所有三个 Country.Code 从 X1992 到 X2016 的列范围绘制为 x 轴,并将这些列的值绘制为 y 轴。

期望的结果:(请注意,图片只是一个粗略的草图,数值确实没有意义)

这是使用 dput 的输出:

输入(过滤器工资)

structure(list(Country.Code = c("LIC", "HIC", "MIC"), Series.Code = c("SL.EMP.WORK.ZS", 
"SL.EMP.WORK.ZS", "SL.EMP.WORK.ZS"), X1991 = c("20.9370976972316", 
"81.0876932275574", "35.5281394063616"), X1992 = c("20.5114136551512", 
"81.1351300966788", "36.1635880437505"), X1993 = c("20.309137441086", 
"81.2165339365649", "37.1943086793304"), X1994 = c("20.5295488411938", 
"81.3404039783739", "37.8383615292357"), X1995 = c("20.6817100202905", 
"81.6237989883691", "38.6979499878051"), X1996 = c("20.6371916830899", 
"81.8361588628956", "39.5068057398044"), X1997 = c("20.286823787263", 
"82.140587079514", "40.0301927962263"), X1998 = c("20.3800244386649", 
"82.4387485706644", "40.1689926776"), X1999 = c("20.764112251619", 
"82.7303105606365", "40.3738643748966"), X2000 = c("20.5693165666214", 
"83.0691410634413", "40.7860042844162"), X2001 = c("20.6682554227926", 
"83.204549665691", "40.192062080076"), X2002 = c("20.8364224185492", 
"83.3236267668205", "40.5335866623684"), X2003 = c("20.9073131339766", 
"83.3872571313811", "41.139037517746"), X2004 = c("20.9741288400519", 
"83.4445860257721", "42.2303006080139"), X2005 = c("20.6931847813705", 
"83.7017144881631", "43.2626386469723"), X2006 = c("21.0482961178193", 
"84.0126990344844", "44.4032188240263"), X2007 = c("21.3789126998501", 
"84.3099847840774", "45.3836159214118"), X2008 = c("21.713214795025", 
"84.5962197639565", "46.1155674823931"), X2009 = c("21.9697284827288", 
"84.5498700141843", "46.8058440395641"), X2010 = c("22.3676584297642", 
"84.614095791104", "47.6604416403023"), X2011 = c("22.383629219082", 
"84.8323447185694", "48.6708213003224"), X2012 = c("22.6398140927035", 
"85.1570293953982", "49.2830314898562"), X2013 = c("23.0490884430663", 
"85.3153737253528", "49.5549460027067"), X2014 = c("22.8973838689315", 
"85.4292150603637", "50.0215575751258"), X2015 = c("22.9079191238809", 
"85.6087846399656", "50.3787072273931"), X2016 = c("22.8986911131366", 
"85.7321179083769", "50.5504090357067")), row.names = c(166L, 
332L, 498L), class = "data.frame")

【问题讨论】:

  • 你能不能把数据不是图像而是代码?最好是dput(DATA_NAME)的输出。
  • 此图与您的数据有何关系?这些值的范围不是从 -2.5 到 4.5,而是从 20.28682 到 85.73212...
  • 我将图像的标题设为“请忽略不正确的值”,但不知何故从未显示标题。很抱歉造成误解,感谢您的回答,这确实是我正在寻找的正确答案。

标签: r dataframe plot graph


【解决方案1】:

这是使用tidyrdplyr(以及ggplot2)的解决方案:

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

filterWage %>%
  tidyr::pivot_longer(cols = starts_with("X"), names_to = "years", values_to = "value") %>%
  dplyr::mutate(years = as.numeric(gsub("X", "", years)), value = as.numeric(value)) %>%
  ggplot(aes(x = years, y = value, colour = Country.Code))+
  geom_line()+
  theme_minimal()

我无法对此进行测试,因为我没有您的数据,但它应该可以工作。

我的想法是我将所有这些列变成一对列,一个存储以前的名称,一个存储值。这样,您的数据是长格式,而不是宽格式。 ggplot 总是喜欢以长格式获取数据。然后,mutate() 将这两列都转换为数值变量,去掉年份中的“X”。

这是输出:

【讨论】:

  • 对不起,但它说“geom_path:每个组仅包含一个观察值。您需要调整组审美吗?”绘制时,图表上不显示任何线条或数据。
  • 这是结果:ibb.co/9YvCPDZ。另外,如何发布数据
  • “定位数据”是什么意思?
  • 正如我对您的问题的评论,提供dput(filterWage) 的输出是一种很好的方式。
  • 别担心,不要自责!无论如何,这并不是缺乏能力。现在你知道它下次!