Я хотел бы связать переменные, которые у меня есть в фрейме данных, т.е. ('prop1', 'prop2', 'prop3'), с определенными цветами и формами на графике. Однако я также хочу исключить данные (используя dplyr::filter), чтобы настроить отображение графика БЕЗ изменения точек и форм, используемых для конкретной переменной. Минимальный пример приведен ниже.
library(ggplot2)
library(dplyr)
library(magrittr)
obj <- c("cmpd 1","cmpd 1","cmpd 1","cmpd 2","cmpd 2")
x <- c(1, 2, 4, 7, 3)
var <- c("prop1","prop2","prop3","prop2","prop3")
y <- c(1, 2, 3, 2.5, 4)
col <- c("#E69F00","#9E0142","#56B4E9","#9E0142","#56B4E9")
shp <- c(0,1,2,1,2)
df2 <- cbind.data.frame(obj,x,var,y,col,shp)
plot <- ggplot(data = df2 %>%
filter(obj %in% c(
"cmpd 1",
"cmpd 2"
)),
aes(x = x,
y = y,
colour = as.factor(var),
shape = as.factor(var))) +
geom_point(size=2) +
#scale_shape_manual(values=shp) +
#scale_color_manual(values=col) +
facet_grid(.~obj)
plot
Однако, когда я редактирую cmpd1 (просто хеширую в коде), цвет и форма prop2 и prop3 для cmpd2 меняются (см. график 2).

С этой целью я попытался добавить scale_shape_manual и scale_color_manual в код (в настоящее время хешированный) и связать их с конкретными переменными (col и shp) в фрейме данных (df2), но возникает та же проблема, что и форма, и цвет этих переменных меняется при исключении одного из условий?
Любая помощь приветствуется.





Попробуйте что-то вроде этого:
library(tidyverse)
obj <- c("cmpd 1","cmpd 1","cmpd 1","cmpd 2","cmpd 2")
x <- c(1, 2, 4, 7, 3)
var <- c("prop1","prop2","prop3","prop2","prop3")
y <- c(1, 2, 3, 2.5, 4)
df2 <- cbind.data.frame(obj,x,var,y)
col <- c("prop1" = "#E69F00",
"prop2" = "#9E0142",
"prop3" = "#56B4E9")
shp <- c("prop1" = 0,
"prop2" = 1,
"prop3" = 2)
plot <- ggplot(data = df2 %>%
filter(obj %in% c(
"cmpd 1",
"cmpd 2"
)),
aes(x = x,
y = y,
colour = var,
shape = var)) +
geom_point(size=2) +
scale_shape_manual(values=shp) +
scale_color_manual(values=col) +
facet_grid(.~obj)
plot
Привет, Чжицян. Большое спасибо за быстрый ответ, работает отлично ;-)