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

Гистограмма с накоплением с использованием ggplot2 — визуализация данных

У меня очень мало опыта работы с R, и я пытаюсь сделать гистограмму с накоплением, используя ggplot2. У меня 2 группы - контрольная и экспериментальная, и 2 варианта - красная и зеленая. Я не знаю, как организовать свои данные.

В моем испытании участвовало 80 животных (контрольные n = 40, экспериментальные n = 40), и им был предоставлен выбор красного и зеленого субстрата, я отметил, какой субстрат они выбрали, и это данные, которые я пытаюсь нанести на график.

По сути, я хотел бы «Экспериментальный» и «Контроль» по оси X и количество вариантов по оси Y (например, «Контроль», «Красный n = 20», «Контроль», «Зеленый = 12» и т. д.).

Любая помощь будет оценена по достоинству!

Отредактировано, чтобы добавить:

Это график, который он выводит

Это код, который я использую (включая предлагаемые настройки):

df <- data.frame(group = rep(c("control", "experimental"), each = 40),
                 substrate = sample (c("red","green"), 80, TRUE))

ggplot(df, aes(x = group, y = substrate, fill = substrate)) + 
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("red", "green"))

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

structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("control", "experimental"
), class = "factor"), substrate = structure(c(1L, 2L, 1L, 2L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 
2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L), .Label = c("green", 
"red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))

вывод из df(behaviour) — исходный фрейм данных

structure(list(group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Control", "Experimental"
), class = "factor"), substrate = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Green", 
"Red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))


24.02.2020

  • Привет, ChristyJudd, так что вы свели в таблицу свои данные. Код @AllanCameron предполагает, что вы этого не сделали. вам нужно сделать y = ‹столбец, содержащий счетчики› и geom_bar(stat=identity) 24.02.2020
  • Лучше всего, если вы покажете нам, как выглядит ваш фрейм данных :) скажите, что df - это ваш фрейм данных, выполните dput(df) и вставьте вывод как часть вашего поста? 24.02.2020
  • Спасибо за вашу помощь. Когда я делаю dput(df), появляется что-то странное, но когда я открываю df из своей глобальной среды, он показывает мои данные? Я все еще могу вставить выше, если хотите. Когда я использую код, вы предлагаете, чтобы метки оси Y были «красными» и «зелеными», а не подсчетом количества красных и зеленых, с чем я сталкивался раньше. Я могу попытаться вставить график выше с кодом, который я использовал, если это вообще поможет? 25.02.2020
  • Все в порядке, dput(df) дает что-то вроде структуры(....), верно? Вставьте этот вывод (начиная со структуры...) как часть своего поста. Снимки экрана к сожалению мало чем помогут.. 25.02.2020
  • Я вставлю этот вывод сейчас. 25.02.2020

Ответы:


1

Ваши данные:

behaviour=structure(list(group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Control", "Experimental"
), class = "factor"), substrate = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Green", 
"Red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))

Мы можем свести ваши данные в таблицу:

 table(behaviour$group,behaviour$substrate)                           
               Green Red
  Control         10  30
  Experimental    27  13

Таким образом, вы можете указать fill или y только с помощью geom_bar. В вашем случае вы указываете заливку, функция geom_bar() сделает за вас подсчет:

ggplot(behaviour,aes(x=group,fill=substrate))+
geom_bar() + scale_fill_manual(values=c("#29c7ac","#c02739"))

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

25.02.2020
  • Спасибо! Все равно не правильно считает. Для моей контрольной группы количество зеленых = 10, красных = 30. Для моего эксперимента количество должно быть красным = 13, зеленым = 27. Извините, что надоедаю! 25.02.2020
  • Не имею представления! Я только что перепроверил свои исходные данные, и это определенно - cont:g=10, red=30 exp:g=27, r=13. Я действительно не уверен, что происходит. 25.02.2020
  • Я вставлю вывод из dput(behaviour) вместо dput(df) выше (если я смогу его правильно отформатировать) 25.02.2020
  • Рисунок выше правильный, но я не могу воссоздать его сам. 25.02.2020
  • странный? Вы дали df.. как это называется в вашей среде R? 25.02.2020
  • это называется "поведением" в моем окружении 26.02.2020
  • Я попробовал это снова сегодня утром, и, кажется, это сработало? Спасибо вам огромное, огромное за вашу помощь!! 26.02.2020

  • 2

    Вы могли бы иметь такие данные, с одной строкой для каждого наблюдения (т.е. каждого животного), с группой и субстратом, записанными для каждого:

    df <- data.frame(group = rep(c("control", "experimental"), each = 40),
                     substrate = rep(c("green", "red", "green", "red"), c(10, 30, 27, 13)))
    
    

    Теперь определите свой график, используя ggplot, указав group в качестве оси x и ..count.. в качестве оси y. Используйте geom_bar, чтобы получить столбцы, которые вы ищете, и, наконец, используйте scale_fill_manual, чтобы установить цвета:

    library(ggplot2)
    
    ggplot(df, aes(x = group, y = ..count.., fill = substrate)) + 
      geom_bar(colour = "black") +
      scale_fill_manual(values = c("green", "red"))
    

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

    24.02.2020
  • Большое спасибо! Это сработало очень хорошо, за исключением того, что, похоже, данные подсчитываются неправильно? Итак, экспериментальный (зеленый = 27, красный = 13) и контрольный (зеленый = 10, красный = 30), но это показывает, что они практически равны. Есть идеи, как это исправить? 24.02.2020
  • @ChristyJudd, это были просто фиктивные данные, которые я использовал для примера, поскольку у меня не было всех ваших данных. Я обновлю его, чтобы отразить ваши цифры, но было бы лучше убедиться, что вы помещаете свой существующий фрейм данных в ggplot, а не фиктивные данные, которые я создал. 24.02.2020
  • Мой «df» имеет те же данные, что и мои фактические данные, но не отображает их на гистограмме. Я не понимаю, почему. Спасибо за обновление гистограммы! 24.02.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге 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 , и использованием..

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