Как изменить метки оси, используя visreg вместе с ggplot2 - PullRequest
4 голосов
/ 15 апреля 2019

Я использую пакет visreg с gg = TRUE (поэтому он будет использовать ggplot2 графику) для рендеринга графиков с подогнанными моделями.

Он автоматически использует имена факторов независимых переменных в качестве меток оси x, но мне нужно, чтобы они выглядели немного по-другому, и попытался изменить текст меток с помощью scale_x_discrete, как можно увидеть здесь .

Но когда я это сделаю, метки оси x, линия оси и ее заголовок станут пустыми.Я считаю, что мне не удается сопоставить параметр labels с параметром * 1012. *

Я также получаю сообщение

Масштаб для 'x' уже присутствует.Добавление еще одной шкалы для «x», которая заменит существующую шкалу.

Проблема, вероятно, заключается в том, как visreg хранит информацию о переменных (и их уровнях).При использовании только ggplot2 эта информация может быть легко восстановлена ​​из использованного набора данных с помощью data$variablename.Но, создав базовый график с помощью visreg, это не так просто.

То, что я уже пробовал:

  • Использование имен уровней переменных, которые по умолчанию отображаются какbreaks.
  • Попытка получить доступ к переменным уровням с помощью fit$xlevels$Species.
  • Гадание visreg может приписывать целые числа уровням и пытаться использовать breaks = c(as.factor("1","2","3")).

Как воспроизвести проблему:

library(visreg)
library(ggplot2)

data(iris)
fit <- lm(Sepal.Length ~ Species, data = iris)

visreg(fit, gg = T) +
  theme(axis.line = element_line(colour = "black")) +
  scale_x_discrete(breaks = c("setosa", "versicolor", "virginica"),
                   labels = c("SETOSA", "VERSICOLOR", "VIRGINICA"))

# ----------------------- OR the equivalent: 

visreg(fit, gg = T) +
  theme(axis.line = element_line(colour = "black")) +
  scale_x_discrete(labels = c("setosa" = "SETOSA",
"versicolor" = "VERSICOLOR", "virginica" = "VIRGINICA"))

Как выглядит ось х, не пытаясь изменить метки:

library(visreg)
library(ggplot2)

data(iris)
fit <- lm(Sepal.Length ~ Species, data = iris)

visreg(fit, gg = T) +
  theme(axis.line = element_line(colour = "black"))

1 Ответ

3 голосов
/ 15 апреля 2019

Я предлагаю это простое решение:

library(visreg)
library(ggplot2)

data(iris)
iris$Species <- factor(iris$Species, labels=c("SETOSA", "VERSICOLOR", "VIRGINICA"))

fit <- lm(Sepal.Length ~ Species, data = iris)
visreg(fit, gg = T)

enter image description here

...