Постройте график множественного рассеяния, используя определенный диапазон столбцов в качестве оси x

#r #dataframe #plot #graph

Вопрос:

У меня есть фрейм данных, как показано ниже:

Фрейм данных

Эти данные сохраняются в виде переменной «filterWage».

Этот фрейм данных содержит столбцы Страна.Код, Серия.Код и диапазон столбцов с X1992 по X2016 (пожалуйста, имейте в виду, что я не мог вместить все столбцы с X1992 по X2016, поэтому на изображении показано только до x2003).

Цель состоит в том, чтобы отобразить этот диапазон столбцов с X1992 по X2016 в виде оси x, а значение этих столбцов-в виде оси y для всех трех стран.Код на том же графике с использованием ggplot.

Желаемый результат: ( пожалуйста, обратите внимание, что изображение является всего лишь грубым наброском, а значения действительно бессмысленны) Желаемый результат - пожалуйста, игнорируйте неправильные значения

Это вывод с помощью dput:

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")
 

Комментарии:

1. Не могли бы вы, пожалуйста, поместить данные не в виде изображения, а в виде кода? Предпочтительно на выходе dput(DATA_NAME) .

2. Как этот график соотносится с вашими данными? Значения варьируются не от -2,5 до 4,5, а от 20,28682 до 85,73212…

3. У меня была подпись к изображению «пожалуйста, игнорируйте неправильные значения», но почему-то подпись никогда не показывалась. Извините за недоразумение и спасибо за ответ, это действительно был правильный ответ, который я искал.

Ответ №1:

Вот решение с использованием tidyr и dplyr (а также 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» в годах.

Вот результат:

введите описание изображения здесь

Комментарии:

1. Извините, но там написано «geom_path: каждая группа состоит только из одного наблюдения. Вам нужно настроить эстетику группы?», и при построении графика на графике не отображается ни линия, ни данные.

2. Вот результат: ibb.co/9YvCPDZ . Кроме того, как можно было бы опубликовать данные

3. Что вы подразумеваете под «позиционированием данных»?

4. Как я прокомментировал ваш вопрос, предоставление выходных dput(filterWage) данных-отличный способ.

5. Не волнуйся, не кори себя! Это никоим образом не было недостатком компетентности. Теперь ты знаешь это для следующего раза!