Подключайте geom_line только между указанными факторами - PullRequest
0 голосов
/ 07 октября 2018

У меня есть набор данных, который имеет значения диаметра для 4 групп лечения в течение нескольких разных месяцев.Я планирую Diameter ~ Treatment для каждого месяца, а также Diameter changes between months ~ Treatment.

Набор данных выглядит следующим образом:

# the data that contains diameter for each month and diameter differences between months

> head(gatheredDiameterAndTreatmentData)
  Treatment             Month Diameter
1  Aux_Drop Diameter_mm.Sep01    55.88
2 Aux_Spray Diameter_mm.Sep01    63.50
3      DMSO Diameter_mm.Sep01    66.04
4     Water Diameter_mm.Sep01    43.18
5  Aux_Drop Diameter_mm.Sep01    38.10
6 Aux_Spray Diameter_mm.Sep01    76.20


# data that contains mean diameter and mean diameter changes for each month

> head(subMeansDiameter)
  Treatment             Month  Diameter   SEdiam
1  Aux_Drop   Diameter_mm.Dec  83.63857 29.62901
2  Aux_Drop Diameter_mm.Feb01 101.20923 24.84024
3  Aux_Drop Diameter_mm.Feb02 110.00154 22.51364
4  Aux_Drop   Diameter_mm.Jan  93.00308 25.13485
5  Aux_Drop   Diameter_mm.Mar 116.84000 22.19171
6  Aux_Drop Diameter_mm.Nov01  74.50667 17.40454


Вот мой код:

# assign the factors name to pick
factorsOnXaxis.DiameterByMonth = c(
    "Diameter_mm.Sep01", "DiameterDiff.Sep01ToDec", "Diameter_mm.Dec", "DiameterDiff.DecToMar", "Diameter_mm.Mar")

# assign name to above factors
factorsOnXaxisName = c('Sep','Dec-Sep','Dec', 'Mar-Dec', 'Mar')    


# start plotting 
gatheredDiameterAndTreatmentData  %>%
  subset(Diameter != "NA") %>%
  ggplot(aes(x = factor(Month), y = Diameter)) + 
  geom_point(aes(colour = Treatment), na.rm = TRUE, 
             position = position_dodge(width = 0.2)) +
  geom_point(data = subMeansDiameter, size = 4, aes(colour = Treatment), 
             na.rm = TRUE, position = position_dodge(width = 0.2)) +

  theme_bw() + # remove background 

  # add custom color to the "Treatment" levels 
  scale_colour_manual( 
    values = c("Aux_Drop" = "Purple", "Aux_Spray" = "Red", 
               "DMSO" = "Orange", "Water" = "Green")) + 

  # rearrange the x-axis
  scale_x_discrete(limits = factorsOnXaxis.DiameterByMonth, labels = factorsOnXaxisName) +

  # to connect the "subMeans - Diameter" values across time points
  geom_line(data = subMeansDiameter, aes(
    x = Month, y = Diameter, group = Treatment, colour = Treatment), 
    position = position_dodge(width = 0.2)) 

Что дает мне такой график:

enter image description here

Вместо geom_line соединительной линии для каждого момента времени, которую я хочу, чтобы линиябыть объединенным между указанными коэффициентами оси x, то есть

  1. в период с сентября по декабрь, март
  2. в период с декабря по сентябрь по март-декабрь


Я пытался манипулировать строкой кода, которая использует geom_line как:

geom_line(data = subMeansDiameter, aes(
    x = c("DiameterDiff.Sep01ToDec", "DiameterDiff.DecToMar"), y = Diameter, group = Treatment, colour = Treatment), 
    position = position_dodge(width = 0.2))

, чтобы соединить линию между Dec-Sep и Mar-Dec.

Но это не работает.Как я могу изменить свой код?

Вот файл данных, который я сохраняю как * .tsv.

builtDiameterAndTreatmentData = http://s000.tinyupload.com/index.php?file_id=38251290073324236098

subMeans = http://s000.tinyupload.com/index.php?file_id=93947954496987393129

1 Ответ

0 голосов
/ 07 октября 2018

Здесь вам нужно явно определить группы, так как цвета недостаточно.

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

ggplot(iris,aes(Sepal.Width, Sepal.Length, color = Species)) + geom_line()

enter image description here

А вот еще один с эстетикой группы, я разделил данные, используя значения Sepal.Length, но вы, скорее всего, будете использовать ifelse по месяцам:

ggplot(iris,aes(Sepal.Width, Sepal.Length, color = Species, 
                group = interaction(Species, Sepal.Length > 5.5))) + 
  geom_line()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...