ggplot scale_y_log10 () issue

Я столкнулся с интересной проблемой с масштабированием с помощью ggplot. У меня есть набор данных, который я могу легко построить, используя линейную шкалу по умолчанию, но когда я использую scale_y_log10 (), числа уходят далеко. Вот пример кода и две картинки. Обратите внимание, что максимальное значение в линейной шкале составляет ~ 700, в то время как логарифмическое масштабирование дает значение 10 ^ 8.Я показываю вам, что весь набор данных содержит всего ~ 8000 записей, так что что-то не так.

Я полагаю, что проблема как-то связана со структурой моего набора данных и биннингом, поскольку я не могу воспроизвести эту ошибку в обычном наборе данных, таком как «бриллианты». Однако я не уверен, как лучше всего решить эту проблему.

спасибо, zach cp


Редактировать: bdamarest может воспроизвести проблему масштабирования в наборе данных алмазов следующим образом:

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 

linear scale log scale

вот несколько примеров данных ... и я думаю, что вижу проблему. Исходный набор данных может состоять из ~ 10 ^ 8 строк. Может быть, номера строк используются для статистики?

> 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")

ОБНОВЛЕНИЕ:

Номера строк не являются проблемой. Вот те же данные, построенные с использованием той же оси x и цвета заливки, и масштабирование полностью правильное:

> 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

enter image description here enter image description here

27
задан Claus Wilke 22 December 2017 в 00:36
поделиться