Использование ggplot для создания профессионально выглядящего графика

#r

#r

Вопрос:

Я пытался использовать ggplot2 для создания профессионально выглядящего графика, но у меня возникли некоторые проблемы со многими вещами. Я хотел бы добавить цвет к точкам данных, добавить даты по оси x и создать линию наилучшего соответствия или что-то подобное, если это возможно. Я искал в Stack Exchange и Google в целом, чтобы попытаться решить эту проблему, но безрезультатно. Я использую «Коэффициент участия в гражданской рабочей силе: мужчины 20 лет и старше, чернокожие или афроамериканцы» из Федерального резервного банка Сент-Луиса (FRED).

Я использую RStudio, и я импортировал данные из LNS11300031, а затем использовал read.csv() функцию для считывания их в RStudio . Изначально я использовал plot() функцию для построения данных, но я хочу использовать ggplot() функцию для создания более красивого графика, но когда я создаю график, точки данных выглядят очень непрозрачными, размытыми и облачными, и на оси x нет меток. Я хотел бы добавить цвет и линию наилучшего соответствия, но я не знаю, как это сделать.

Это код, который я использовал для создания графика без меток по оси x:

 ggplot(data = labor, mapping = aes(x = labor$DATE, y = labor$LNS11300031))   geom_point(alpha = 0.1)
  

Это график, созданный моим кодом:

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

Вот некоторые примеры данных (labor — это переменная, которую я использовал для хранения данных с сайта FRED):

 head(labor)    DATE        LNS11300031
  1         1972-01-01        77.6
  2         1972-02-01        78.3
  3         1972-03-01        78.7
  4         1972-04-01        78.6
  5         1972-05-01        78.7
  6         1972-06-01        79.4
  

Я хотел бы изменить имя переменной LNS11300031 на коэффициент участия рабочей силы

Дополнительная информация о данных:

 str(labor)
'data.frame':   566 obs. of  2 variables:
 $ DATE       : Factor w/ 566 levels "1972-01-01","1972-02-01",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ LNS11300031: num  77.6 78.3 78.7 78.6 78.7 79.4 78.8 78.7 78.6 78.1 ...
  

Я хотел бы, чтобы код создавал гораздо более четкие точки данных с цветом и линией тренда, а также мог иметь ось x с соответствующими датами.

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

1. «Как мне сделать так, чтобы график выглядел красиво» — довольно широкий вопрос, и вам, возможно, было бы лучше начать с чего-то вроде ggpubr , который имеет несколько приятных настроек по умолчанию для внешнего вида. Тем не менее, ваши требования довольно специфичны, поэтому я думаю, что на этот вопрос следует ответить.

2. Два других кратких комментария: ваши точки выглядят размытыми, потому что вы сделали их размытыми с помощью alpha = 0.1 ! Убедитесь, что эта опция выполняет то, что вы хотите. И у вас действительно есть метки по оси x, просто у вас их так много, что все они сливаются в нечитаемый беспорядок.

Ответ №1:

Вот основная попытка охватить все 3 желаемых улучшения:

  • Более четкие указания: не устанавливайте альфа-значение слишком низким! Немного альфа-текста хорошо подходит для точек перекрытия, но alpha = 0.1 делает их слишком размытыми.
  • Цвет: R понимает простые названия цветов, такие как «красный», но также и шестнадцатеричные цветовые коды. Выберите любые цвета, которые вы хотите.
  • Линия тренда: легко добавляется с помощью stat_smooth() . Я использовал method='lm' , который дает прямую линию линейной регрессии, но есть более гибкие альтернативы.
  • Метки даты на оси x: Убедитесь, что для вашего DATE столбца правильно задан Date тип, и используйте scale_x_date() для настройки меток.
 quantmod::getSymbols("LNS11300031", src="FRED")
# Your data is available from the quantmod package

labor = LNS11300031 %>%
    as.data.frame() %>%
    rownames_to_column(var = "DATE") %>%
    # Make sure DATE is a Date column
    mutate(DATE = as.Date(DATE))

# Generally, you don't use data$column syntax within ggplot, 
#   just give the column name
ggplot(data = labor, mapping = aes(x = DATE, y = LNS11300031))   
    geom_point(alpha = 0.7, colour = "#B07AA1")  
    stat_smooth(method = "lm", colour = "#E15759", se = FALSE)  
    scale_x_date(date_breaks = "5 years", date_labels = "%Y")  
    theme_minimal()
  

Вывод:

Построение

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

1. Большое тебе спасибо, Мариус, я действительно ценю твою оперативную помощь, ты полностью ответил на мой вопрос, а также добавил информацию, о которой я не знал, но я очень рад, что ты включил, и добавил объяснение, которое мне было нужно, чтобы понять, что мне нужно делать дальше. Еще раз спасибо!!!

2. Могу ли я каким-либо образом добавить показатель участия афроамериканцев в рабочей силе также для женщин? Я использовал тот же пакет quantmod, что и вы, quantmod::getSymbols(«LNU01300032″, src =»FRED»), а затем я создал новую переменную labor2 с точно таким же значением, как вы сделали для переменной labor, и я просто заменил LNS11300031 на LNU01300032, но теперь я не уверен, как добавить оба графика к графику, используя ggplot.

3. @pierrefrancois Да, одним из способов было бы добавить еще одну геометрическую точку и stat_smooth к существующему графику и установить «data = labor2» в новых геометриях.