Как построить точки с помощью ggplot2, используя «for» l oop? - PullRequest
0 голосов
/ 04 мая 2020

Я начал изучать «ggplot2» и циклы с нескольких раз. Итак, теперь я пытаюсь построить некоторые точки с помощью «ggplot2», используя «for» l oop. Но я не знаю, как это сделать, и я не знаю, хорошая ли это идея. Я проверил подобные вопросы, и я просто не понимаю. Возможно, мне нужно больше объяснений.

Я какое-то время занимался серфингом по переполнению стека, и это мне очень помогло. Тем не менее, это мой первый вопрос, и если он пропустит какую-то информацию или сценарий будет неверно представлен, просто скажите мне, что не так, и я позабочусь об этом в следующий раз.

Вот мой сценарий с geom_point ():

    library(tidyverse)
    data("CO2")

    ggplot(data = CO2, mapping = aes(x = conc, y = uptake)) +            # I think that I must do this.

      for (i in 1:nrow(CO2)) {                                           # For each line of the dataset.
        if(CO2$Type[i] == "Quebec" & CO2$Treatment[i] == "nonchilled") { # Test these conditions.
          geom_point(mapping = aes(x = CO2$conc[i], y = CO2$uptake[i]))  # If they are true, add the point using geom_point.
        }                                                                # And eventually, I would like to add more « for » loops.
      }

И я также пытаюсь использовать annotate ():

    ggplot(data = CO2, mapping = aes(x = conc, y = uptake)) +

      for (i in 1:nrow(CO2)) {
        if(CO2$Type[i] == "Quebec" & CO2$Treatment[i] == "nonchilled") {
          annotate(geom = "point", x = CO2$conc[i], y = CO2$uptake[i])
        }
      }

Точки просто не появляются. Я также пытаюсь складывать значения в векторах и присваивать их аргументам «x» и «y».

Кто-то знает, как это сделать просто, и если это распространено. Если это не так, почему? А какие есть альтернативы?

Спасибо и хорошего дня!

Ответы [ 5 ]

0 голосов
/ 04 мая 2020

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

CO2 %>%
  ggplot(mapping = aes(x = conc, y = uptake)) +
  geom_point() +
  facet_grid(. ~ Type + Treatment)
0 голосов
/ 04 мая 2020

Ты слишком усложнил это. Попробуйте filter:

  library(tidyverse)
  data("CO2")

  CO2 %>% filter(Type == 'Quebec' & Treatment == 'nonchilled') %>% 
  ggplot(aes(x = conc, y = uptake)) + 
    geom_point()  
0 голосов
/ 04 мая 2020

Не думаю, что вы захотите иметь значение для l oop в функции ggplot. Я бы порекомендовал отфильтровать ваш фрейм данных в соответствии с желаемыми условиями, а затем построить все эти точки.

Вам нужно будет составить список всех условий, которые вы хотите, и отфильтровать, чтобы создать информационный фрейм только тех наблюдений, которые вы хотите построить. Смотрите ниже:

CO2_quebec <- CO2 %>% 
  filter(Type=="Quebec") %>% #Filters out Type only in 'Quebec' 
  filter(Treatment == "nonchilled") #Filters out Treatment only for 'nonchilled' 

ggplot(data = CO2_quebec, mapping = aes(x = conc, y = uptake)) +  
  geom_point() #Note, your geom_point takes your x and y based on your ggplot line above unless otherwise specified 
0 голосов
/ 04 мая 2020

Это очень распространенное использование ggplot.

Вот то, что вы, вероятно, ищете:

gg<- ggplot(data = CO2[CO2$Type=="Quebec" & CO2$Treatment=="nonchilled",], mapping = aes(x = conc, y = uptake))  + 
  geom_point()
gg

Прежде всего, вы должны отфильтровать данные перед построением графика. Это сделает вашу жизнь проще (как я сделал). Тогда ggplot - умный пакет: вам не нужно точно определять каждую точку, которую вы хотите построить. Если вы ему ничего не скажете, он поймет, что вы хотите построить все (поэтому полезно предварительно отфильтровать).

Более того, вот что вы, вероятно, оцените:

gg<- ggplot(data = CO2[CO2$Treatment=="nonchilled",], mapping = aes(x = conc, y = uptake, group=Type,color=Type))  + 
  geom_point()
gg
0 голосов
/ 04 мая 2020

Я согласен с Руи Баррадасом, я бы сделал что-то вроде этого:

CO2 %>%
  filter(Type == "Quebec" & Treatment == "nonchilled") %>% # Get nonchilled Quebec data
  ggplot(aes(x = conc, y = uptake)) +                      # Plot concentration and uptake
    geom_point()                                           # Plot as points
...