me he encontrado con un problema interesante con escalamiento utilizando ggplot. Tengo un conjunto de datos que puedo graficar bien utilizando la escala lineal predeterminada, pero cuando uso scale_y_log10() los números van muy lejos. Aquí hay un código de ejemplo y dos imágenes. Tenga en cuenta que el valor máximo en la escala lineal es ~ 700, mientras que la escala de registro da como resultado un valor de 10^8. Te muestro que todo el conjunto de datos tiene solo ~ 8000 entradas, por lo que algo no está bien.scale_y_log10 ggplot() tema
Me imagino que el problema tiene que ver con la estructura de mi conjunto de datos y el hurgar en la basura ya que no puedo reproducir este error en un conjunto de datos comunes como 'diamantes'. Sin embargo, no estoy seguro de la mejor manera de solucionar problemas.
gracias, zach cp
Editar: bdamarest puede reproducir el problema de escala en el conjunto de datos de diamantes de la siguiente manera:
example_1 = ggplot(diamonds, aes(x=clarity, fill=cut)) +
geom_bar() + scale_y_log10(); print(example_1)
#data.melt is the name of my dataset
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar()
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
aquí hay algunos datos de ejemplo ... y creo que veo el problema. El conjunto de datos original fundido puede tener ~ 10^8 filas de largo. Tal vez los números de fila se están utilizando para las estadísticas?
> head(data.melt)
Library name group
221938 AB Arthrofactin glycopeptide
235087 AB Putisolvin cyclic peptide
235090 AB Putisolvin cyclic peptide
222125 AB Arthrofactin glycopeptide
311468 AB Triostin cyclic depsipeptide
92249 AB CDA lipopeptide
> dput(head(test2))
structure(list(Library = c("AB", "AB", "AB", "AB", "AB", "AB"
), name = c("Arthrofactin", "Putisolvin", "Putisolvin", "Arthrofactin",
"Triostin", "CDA"), group = c("glycopeptide", "cyclic peptide",
"cyclic peptide", "glycopeptide", "cyclic depsipeptide", "lipopeptide"
)), .Names = c("Library", "name", "group"), row.names = c(221938L,
235087L, 235090L, 222125L, 311468L, 92249L), class = "data.frame")
ACTUALIZACIÓN:
Los números de fila no son el problema. Aquí son los mismos datos graficados utilizando el mismo aes eje X y llenan de color y la escala es del todo correcto:
> ggplot(data.melt, aes(name, fill= name)) + geom_bar()
> ggplot(data.melt, aes(name, fill= name)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
gracias Brian, le agradezco la explicación detallada. También puede usar geom_bar (position = "dodge") (respuesta cortesía de Winston Chang) – zach
Para dar un poco más de información sobre lo que está sucediendo aquí, los gráficos de barras apiladas generalmente le dan una altura de barra igual a la suma de conteos. Sin embargo, sum (log (counts)) es equivalente a log (product (counts)). En otras palabras, verá alturas de barra como si multiplicara los recuentos juntos. – Brian