studio - superponer graficas en r ggplot
Eliminar los niveles de factor no utilizados de un gráfico de barras ggplot (2)
Quiero hacer lo contrario de esta pregunta , y más o menos lo contrario de esta pregunta , aunque se trata de leyendas, no de la trama en sí.
Las otras preguntas de SO parecen estar preguntando sobre cómo mantener los niveles de factor no utilizados. De hecho, me gustaría quitar la mía. Tengo varias variables de nombre y varias columnas (formato ancho) de atributos de variable que estoy usando para crear numerosos gráficos de barras. Aquí hay un ejemplo reproducible:
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()
Entiendo esto:
Me gustaría que solo los nombres que tienen las variantes correspondientes aparezcan en mi gráfico de barras (como en, no habría espacio vacío para B).
Reutilizar el código de trazado de la base será bastante fácil si simplemente puedo cambiar el nombre de mi archivo de salida y=var
bit y=var
. ¡Me gustaría no tener que subcontratar mi marco de datos solo para usar niveles de carga en el resultado para cada gráfico si es posible!
Actualización basada en la sugerencia na.omit()
Considere un conjunto de datos revisados:
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()
Necesito usar na.omit()
para trazar var1
porque hay un NA presente. Pero dado que na.omit se asegura de que los valores estén presentes en todas las columnas , la gráfica también elimina A
, ya que tiene un NA en var3
. Esto es más análogo a mis datos. Tengo 15 respuestas totales con NAs salpicadas. Solo quiero eliminar los niveles de factor que no tienen valores para el vector y graficado actual , no que tengan NA en ningún vector en todo el marco de datos.
Tenga en cuenta que, al trazar, está utilizando solo dos columnas de su marco de datos, lo que significa que, en lugar de pasar sus datos completos, puede aplicar las columnas relevantes x[,c("name", "var1")]
na.omit para eliminar las filas no deseadas (como sugiere Gavin Simpson) na.omit(x[,c("name", "var1")])
y luego traza estos datos.
Mi R / ggplot está bastante oxidado, y me doy cuenta de que probablemente haya formas más limpias de lograrlo.
Una de las opciones fáciles es usar na.omit()
en su marco de datos df
para eliminar esas filas con NA
ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()
Dada tu actualización, los siguientes
ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()
Funciona bien y solo considera NA
en Var1
. Dado que solo está trazando el name
y Var
, aplique na.omit()
a un marco de datos que contiene solo esas variables
ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()