#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. Разве каждая строка не соответствует одной точке? Для линии / сегмента требуется как минимум начальная и конечная позиция. Было бы понятнее, если бы вы включили эскиз в свой вопрос о том, как выглядит ваш идеальный результат.