Объединить два графика в один с меткой - PullRequest
0 голосов
/ 19 июня 2020

Имея такой код: Имея следующие команды:

library(stm)
gadarian <- gadarian
K<-c(5,10,15)
temp<-textProcessor(documents=gadarian$open.ended.response,metadata=gadarian)
out <- prepDocuments(temp$documents, temp$vocab, temp$meta)
documents <- out$documents
vocab <- out$vocab
meta <- out$meta
set.seed(02138)
K<-c(5,10,15)
df1 <- searchK(documents, vocab, K, prevalence=~treatment + s(pid_rep), data=meta)
df2 <- searchK(documents, vocab, K, prevalence=~treatment + s(pid_rep), data=meta)

Мы можем построить результаты для df1:

plot(df1$results$K, df1$results$heldout, type = "p", main = "Held-Out Likelihood", 
    xlab = "Number of Topics (K)", ylab = "Held-Out Likelihood", ask = TRUE)
lines(df1$results$K, df1$results$heldout, lty = 1, col = 1)

и для df2, используя это:

plot(df2$results$K, df2$results$heldout, type = "p", main = "Held-Out Likelihood", 
    xlab = "Number of Topics (K)", ylab = "Held-Out Likelihood", ask = TRUE)
lines(df2$results$K, df2$results$heldout, lty = 1, col = 1)

Как можно объединить эти два графика в один, имеющий разные цвета для каждой линии, и добавить прямоугольник в правом верхнем углу графика, который будет иметь цветную линию и рядом с ней метки likehood_score_df1 и likehood_score_df2?

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вот возможное решение с использованием ggplot2. Если вы хотите добавить точки или настроить макет, это сделать довольно просто. Надеюсь, этот пример поможет вам начать работу :)

Для будущих вопросов было бы полезно, если бы вы могли предоставить минимальный рабочий пример (то есть, если бы вы могли просто указать df1 $ result и df2 $ результат было бы хорошо)

df1$results %>% 
  dplyr::mutate(group="likehood_score_df1") %>%
  dplyr::bind_rows(df2$results %>%
                     dplyr::mutate(group="likehood_score_df2")) %>%
  ggplot2::ggplot(ggplot2::aes(x=K, y=heldout, color=group)) +
  ggplot2::geom_line() +
  ggplot2::labs(x="Number of Topics (K)",
                y="Held-Out Likelihood",
                title="Held-Out Likelihood") + 
  ggplot2::theme_minimal() +
  ggplot2::theme(legend.position=c(0.9,0.9),
                 legend.direction="vertical")

enter image description here

1 голос
/ 19 июня 2020

Вы можете использовать следующий код

plot(df1$results$K,df1$results$heldout,
     ylim=range(c(df1$results$heldout,df2$results$heldout)),
     xlim=range(c(df1$results$K,df2$results$K)), type="b",col="red",
     xlab = "Number of Topics (K)", ylab = "Held-out Likelihood",
     main="Held-out Likelihood")

lines(df2$results$K,df2$results$heldout,col="green", type="b")

# Add a legend
legend(5, -5.52, legend=c("Likelihood score 1", "Likelihood score 2"),
   col=c("red", "green"), lty=1, cex=0.8, pch = 1)

Здесь вы должны указать свои координаты x и y, где вы хотите добавить свою легенду. Гораздо лучшим решением является динамическое c позиционирование легенды с использованием

legend(locator(1), legend=c("Likelihood score 1", "Likelihood score 2"),
       col=c("red", "green"), lty=1, cex=0.8, pch = 1)

. После запуска этого щелчка мышью в том месте, где вы хотите разместить легенду внутри графика. enter image description here

Код немного запутанный, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...