Как добавить легенду в ggplot на мой график - PullRequest
0 голосов

Привет, есть код для симуляции гауссовского процесса. Пожалуйста, кто-нибудь может помочь мне добавить легенду к моим графикам в правом верхнем углу. Я хочу указать различные значения параметров для каждого из стилей / цветов линии, например, l = 1, l = 5, l = 10. Спасибо.

# simulate a gaussian process
simGP = function(K){
  n = nrow(K)
  U = chol(K) # cholesky decomposition
  z = rnorm(n)
  c(t(U) %*% z)
}

# choose points to simulate the covariance.
x = seq(-1, 1, length.out = 500)


# Exponential kernel ------------------------------------------------------



kernel_exp = function(x, l = 1) {
  d = as.matrix(dist(x))/l
  K = exp(-d)
  diag(K) = diag(K) + 1e-8
  K
}

{y1 = simGP(kernel_exp(x,l=10))
y2 = simGP(kernel_exp(x,l=1))
y3 = simGP(kernel_exp(x,l=0.1))
data1 <- as.data.frame(x,y1)
data2 <- as.data.frame(x,y2)
data3 <- as.data.frame(x,y3)
df=data.frame(data1,data2,data3)

ggplot() + 
  geom_line(data=data1, aes(x=x, y=y1), color="green4", linetype = "twodash", size=0.5) + 
  geom_line(data=data2, aes(x=x, y=y2), color='red', linetype="longdash", size=0.5) +
  geom_line(data=data3, aes(x=x, y=y3), color='blue') +
  scale_color_manual(values = colors) +
  theme_classic() +
  labs(x='input, x',
       y='output, f(x)')+
  theme(axis.text=element_text(size=16),
        axis.title=element_text(size=14))}

1 Ответ

1 голос
/ 29 мая 2019

Вы можете сделать это с помощью переменной dataframe, чтобы сгруппировать тип линии и цвет. Если вы хотите указать цвет и тип линии, используйте scale_color_discrete и scale_linetype_discrete

y1 = simGP(kernel_exp(x,l=10))
y2 = simGP(kernel_exp(x,l=1))
y3 = simGP(kernel_exp(x,l=0.1))
data1 <- data.frame(x, y = y1, value = "10")
data2 <- data.frame(x, y = y2, value = "1")
data3 <- data.frame(x, y = y3, value = "0.1")
df=rbind(data1,data2,data3)

ggplot(data = df, aes(x=x, y=y, color = value, linetype = value, group = value)) + 
  geom_line(size=0.5) + 
  theme_classic() +
  labs(x='input, x',
       y='output, f(x)')+
  theme(axis.text=element_text(size=16),
        axis.title=element_text(size=14))
...