R — сделать геометрическую линию пунктирной / продаваемой по категориям

#r #ggplot2

#r #ggplot2

Вопрос:

мой df выглядит примерно так

 df <- read.table(text="
                 cat          eff   count   segment   segment2
    1              1            0     123     plane    plane_0
    2              2           25      12     plane   plane_25
    3              3           50      54     plane   plane_50
    4              4           75      34     plane   plane_75
    5              1           50      62       car     car_50
    6              2           75      12       car     car_75
    7              1           50      11      boat    boat_50
    8              2           75      10      boat    boat_75
", header=TRUE)
  

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

Самолет должен быть красным, автомобиль — зеленым, лодка — синей. Если коэффициент полезного действия равен 0, то линия должна быть сплошной, если коэффициент полезного действия равен 25, то линия должна быть пунктирной, 50 = пунктирная, 75 две черточки.

 ggplot(df, aes(x = as.numeric(cat), y = eff, color = segment2))  
  geom_line(stat = "identity", size = 1.5, linetype = "dashed")  
  geom_point(size = 3.5) 
  

Ответ №1:

Вы можете попробовать это:

 ggplot(df, 
       aes(x = as.numeric(cat), y = eff))  
  geom_line(aes(linetype = factor(eff)), size = 1.5)  
  geom_point(aes(color = segment), size = 3.5)  
  scale_color_manual(values = c("boat" = "blue", "car" = "green", "plane" = "red"))  
  scale_linetype_manual(values = c("0" = "solid", "25" = "dashed", 
                                   "50" = "dotted", "75" = "twodash"))
  

график

(Примечание: на основе выборочных данных точки, соответствующие автомобилю, полностью скрыты под другими точками.)

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

1. Эй, спасибо, но я думаю, что необходим ggplot(df, aes(x = as.numeric(cat), y = eff, color = segment2)). Я имею в виду, что график segment2 othwerv, похоже, не в порядке

2. Вы имеете в виду, что хотите сопоставить цвет переменной с 8 различными значениями, но хотите использовать только 3 разных значения цвета?

3. Мне нужна отдельная строка для каждой строки из df. Вот почему я использую color = segment2. Но на следующем шаге мне нужно создать цвет по столбцу сегмента и тип линии по столбцу eff.

4. Разве каждая строка не соответствует одной точке? Для линии / сегмента требуется как минимум начальная и конечная позиция. Было бы понятнее, если бы вы включили эскиз в свой вопрос о том, как выглядит ваш идеальный результат.