Подтвердить что ты не робот

Удалите неиспользуемые уровни факторов из графика графика 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 в любом векторе во всем кадре данных.

4b9b3361

Ответ 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 довольно ржавый, и я понимаю, что, возможно, существуют более чистые способы достижения этого.