В Створення легенди ggplot як кольору, так і форми є спосіб поєднати форму і колір, але заснований на одній змінної. Цікаво, якщо це можливо, якщо змінна розбивається на дві змінні.
Hier - це дані тесту:
(x <- data.frame(time =rep(1:5,4)
, sex = rep(c("m","f"), each=5)
, val_type = rep(c("obs","fit"),each=10)
, val = rep(1:4,each=5)*rep(1:5,4)
)
)
Щоб показати, як я хочу мати легенду, я поєдную дві змінні:
x$sv <- paste(x$sex,x$val_type,sep="-")
Ось ggplot з однією змінною:
ggplot(data=x, aes(x=time, y=val, linetype=sv, col=sv)) +
geom_line() +
scale_colour_manual(name = ""
, values=c("red","red","blue","blue")
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
) +
scale_linetype_manual(name = ""
, values=c(1,2,1,2)
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
)
а ось сюжет:
Я хотів би мати таку ж легенду, але використовувати дві змінні окремо
ggplot(data=x, aes(x=time, y=val, linetype=val_type, col=sex)) +
geom_line()
Це можливо? Причина, по якій я не хотів би використовувати комбіновану змінну, полягає в тому, що я не хочу створювати змінні, які не потрібні для аналізу. Інша причина полягає в тому, щоб побачити, як легенда може бути налаштована вручну. Дякуємо за допомогу.
Відповіді:
2 для відповіді № 1Я не бачу створення нової змінної як основної проблеми (особливо якщо ви використовуєте труби). interaction
функція і використовуючи ваші ручні визначення масштабу.
ggplot(data = x,
aes(x = time,
y = val,
linetype = interaction(val_type, sex),
col = interaction(val_type, sex))) +
geom_line() +
scale_colour_manual(name = ""
, values=c("red","red","blue","blue")
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
) +
scale_linetype_manual(name = ""
, values=c(1,2,1,2)
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
)