Arhn - архитектура программирования

Как построить данные (Var1 против Var2 в виде линейного графика), содержащие большое количество факторов

У меня есть данные следующего вида:

Factor  Var1  Var2
1       100   1.5
2       150   1.2
3       90    1.9
......
1       80    2.0
2       96    2.1
3       50    2.9

Я должен сравнить вариацию в Var2 с Var1 для разных факторов. Идея состоит в том, чтобы определить диапазон значений в Var1, соответствующий тому, какие низкие значения в Var2 и для какого фактора. У меня до 32 факторов.

Как лучше всего это сделать?

До сих пор я реализовал это как линейный график в ggplot (см. Рисунок ниже).

ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$Factor)) + 
  geom_line(size=0.05) + 
  geom_point(size=0.8) + 
  coord_cartesian(ylim = c(0,5)) + 
  labs(x='var1', y='var2')

Рисунок ggplot

Однако рисунок очень загроможден, и трудно различить шаблоны для различных факторов, особенно из-за цветовой кодировки в виде градиента.

Я также пробовал использовать разные формы для точек.

ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$factor)) +  
  geom_line(size=0.05) + 
  geom_point(size=0.8, aes(shape=factor(df$Factor))) + 
  coord_cartesian(ylim = c(0,5)) + 
  labs(x='var1', y='var2')

Но это дает предупреждающее сообщение (см. Ниже) и не отображает символы для всех факторов.

 # Warning messages:
 #    1: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 29. Consider specifying shapes manually if you must have them. 

Как лучше всего визуализировать это изменение данных? Количество факторов может варьироваться (максимум 32).

** Как и предполагалось, я попробовал facet_wrap (см. Рис. Ниже).

ggplot(data = df, aes(x = df$var1, y = df$var2)) + geom_line(size=0.05) + geom_point(size=0.8) + coord_cartesian(ylim = c(0,5)) + facet_wrap(~ df$Factor) + labs(x='var1', y='var2') #+ geom_hline(yintercept = 2)

facet_wrap fig

Для сравнения факторов я хотел бы добавить горизонтальную линию ко всем графикам. Но geom_hline (yintercept = 2) не помогает, выдает следующее сообщение об ошибке:

Error in `$<-.data.frame`(`*tmp*`, "PANEL", value = c(6L, 8L, 24L, 26L, : replacement has 1170 rows, data has 1

Как добавить ко всем этим графикам горизонтальную линию? В качестве альтернативы, есть ли способ разделить фрейм данных на меньшие фреймы данных, состоящие из 5-6 факторов вместо всех, и построить график для каждого из этих меньших наборов?


  • в противном случае рассмотрите plotly::ggplotly, где вы можете взаимодействовать с окончательным графиком, чтобы либо увеличить конкретный раздел, либо конкретный коэффициент раздела, дважды щелкнув легенду. 06.06.2017

Ответы:


1

Если ваши уровни факторов имеют внутренний порядок, возможно, лучше построить их как градиент, как если бы они были числовыми:

df$Factor_numeric <- as.numeric(gsub("2MCT ", "", Factor))
ggplot(data = df,
       aes(x = var1,
           y = var2,
           colour = Factor_numeric) +  
  geom_line(size=0.05) + 
  scale_colour_gradient(name = "Your Factor",
                        labels = function(breaks)  paste0("2MCT ", breaks)) +
  coord_cartesian(ylim = c(0,5)) + 
  labs(x='var1', y='var2')

Другой вариант - использовать новый столбец во фрейме данных, который группирует ваш фактор, чтобы получить меньше графиков:

df$grouped_Factor <- NA
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 101:108)] <- "G1"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 109:118)] <- "G2"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 119:124)] <- "G3"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 125:132)] <- "G4"

ggplot(data = df,
       aes(x = var1, y = var2, colour = Factor)) + 
  geom_line(size=0.05) +
  geom_point(size=0.8) +
  coord_cartesian(ylim = c(0,5)) +
  facet_wrap(~ grouped_Factor) +
  labs(x='var1', y='var2')
06.06.2017
  • Я попытался сгруппировать факторы и построить график. Однако цвета назначаются в форме градиента, поэтому на графике трудно четко сравнить, какой коэффициент имеет более высокие значения Var2 для данного диапазона значений var1. Можно ли указать цвета или использовать другие символы? 06.06.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..