/ / ggplot2: jak dostosować typy linii + kolejność w legendzie? - r, ggplot2

ggplot2: jak dostosować typy linii + kolejność w legendzie? - r, ggplot2

Chciałbym dostosować rodzaje linii wpo ggplot. W ten sposób wprowadzam kolejną kolumnę w data.frame df, aby reprezentować typ linii, ale gdy ją przekonwertuję na czynnik, to w legendzie pojawia się rodzaj linii zamiast "metody" (zobacz próbę 3).

Jak mogę uzyskać "metodę" w legendzie? W końcu chciałbym móc

  1. swobodnie wybierz rodzaj linii,
  2. dowolnie wybrać kolejność, w jakiej te rodzaje linii pojawiają się w legendzie, oraz
  3. mieć odpowiednią "metodę" pokazaną jako tekst legendy.

Oto moje próby:

require(ggplot2)
set.seed(1)
df <- data.frame(x=c(1:4, 2:5),
method=rep(c("a", "b"), each=4),
lt=rep(c(5,3), each=4),
value=rep(c(0,1), each=4)+runif(8))

## trial 1:
ggplot(df, aes(x=x, y=value)) +
geom_point() +
geom_line(aes(group=method, linetype=method))
# fine, but not the linetypes I would like to have

## trial 2:
ggplot(df, aes(x=x, y=value)) +
geom_point() +
geom_line(aes(group=method, linetype=lt))
# correct linetypes, but no legend

## trial 3:
ggplot(df, aes(x=x, y=value)) +
geom_point() +
geom_line(aes(group=method, linetype=as.factor(lt)))
# legend, but not the correct one (I would like to have the "group"ing
# variable "method" in the legend as in trial 1)

Odpowiedzi:

16 dla odpowiedzi nr 1

Posługiwać się method jako linetype, ale następnie ręcznie odwzoruj go na typy linii, które chcesz. Nie musisz wprowadzać innej zmiennej w ten sposób.

ggplot(df, aes(x=x, y=value)) +
geom_point() +
geom_line(aes(linetype=method)) +
scale_linetype_manual(breaks=c("a","b"), values=c(5,3))

wprowadź opis obrazu tutaj