Удалите неиспользуемые уровни факторов из графика графика ggplot
Я хочу сделать противоположный этот вопрос, а также противоположность этого вопроса, хотя и о легендах, а не о сюжете.
Другие вопросы SO, похоже, задают вопрос о том, как сохранить неиспользованные уровни факторов. Мне действительно хотелось, чтобы мой был удален. У меня есть несколько переменных имени и несколько столбцов (широкий формат) переменных атрибутов, которые я использую для создания многочисленных графиков. Здесь воспроизводимый пример:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Я получаю это:
![enter image description here]()
Я хотел бы, чтобы на моем графике штрихов отображались только имена, имеющие соответствующий var n (например, пустое место для B не было).
Повторное использование кода базового графика будет довольно простым, если я могу просто изменить имя выходного файла и бит y=var
. Я бы не хотел подмножать свой фрейм данных, чтобы использовать дропы на результат для каждого сюжета, если это возможно!
Обновление на основе предложения na.omit()
Рассмотрим пересмотренный набор данных:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Мне нужно использовать na.omit()
для построения var1
, потому что там присутствует NA. Но так как na.omit гарантирует, что значения присутствуют для всех столбцов, график удаляет A
, так как он имеет NA в var3
. Это более похоже на мои данные. У меня есть 15 ответов с НС. Я хочу только удалить уровни факторов, которые не имеют значений для текущего начерченного вектора y, но не имеют NA в любом векторе во всем кадре данных.
Ответы
Ответ 1
Одним из простых вариантов является использование na.omit()
в вашем фрейме данных df
для удаления этих строк с помощью NA
ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()
Учитывая ваше обновление, выполните следующие
ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()
работает нормально и учитывает NA
в Var1
. Учитывая, что вы только рисуете name
и Var
, примените na.omit()
к кадру данных, содержащему только эти переменные
ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()
Ответ 2
Обратите внимание, что при построении графика вы используете только два столбца вашего фрейма данных, что означает, что вместо передачи всего вашего файла data.frame вы можете использовать соответствующие столбцы x[,c("name", "var1")]
применить na.omit для удаления нежелательных строк (как предлагает Гэвин Симпсон) na.omit(x[,c("name", "var1")])
, а затем постройте эти данные.
Мой R/ggplot довольно ржавый, и я понимаю, что, возможно, существуют более чистые способы достижения этого.