График продаж во времени в R

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

top100 <- head(sort(games$NA_Sales,decreasing=TRUE), n = 100)
as.data.frame(top100)

Затем я попытался построить это с помощью приведенного ниже кода:

ggplot(top100)+
  aes(x=Year, y = Global_Sales) +
    geom_point()

Бьюсь об заклад, приведенная ниже ошибка при использовании подмножества top100 Ошибка: data должен быть фреймом данных или другим объектом, который может быть приведен к fortify(), а не числовым вектором

если я использую настоящие игровые наборы данных, я прикреплю сюжет.

Любые идеи?

Сюжет


person Gary    schedule 13.12.2019    source источник
comment
as.data.frame(top100) не работает на месте - нужно делать top100=as.data.frame(top100)   -  person CMichael    schedule 13.12.2019
comment
Спасибо, я получаю это после этого: Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как данные (100): x, y .... это связано с NA в столбце года?   -  person Gary    schedule 13.12.2019
comment
Не могли бы вы поделиться образцом ваших данных, используя dput, чтобы воспроизвести вашу проблему? В ggplot в этом случае geom_point отсутствующие данные выдадут вам предупреждение и удалит строку данных.   -  person Ben    schedule 13.12.2019


Ответы (1)


Как указано в комментариях @CMichael, у вас есть несколько проблем в вашем коде. В отсутствие воспроизводимого примера я использовал набор данных iris, чтобы объяснить вам, что не так с вашим кодом.

top100 ‹- head(sort(games$NA_Sales, по убыванию=TRUE), n = 100)

Делая это, вы извлекаете только один столбец.

Та же команда с набором данных iris:

> head(sort(iris$Sepal.Length, decreasing = TRUE), n = 20)
 [1] 7.9 7.7 7.7 7.7 7.7 7.6 7.4 7.3 7.2 7.2 7.2 7.1 7.0 6.9 6.9 6.9 6.9 6.8 6.8 6.8

Итак, во-первых, у вас больше нет двух измерений для построения ggplot2. Во-вторых, даже colnames не сохраняются во время извлечения, поэтому вы не можете после запроса ggplot2 построить Year и Global_Sales.

Итак, чтобы решить вашу проблему, вы можете сделать (здесь пример с набором данных iris):

top100 = as.data.frame(head(iris[order(iris$Sepal.Length, decreasing = TRUE), 1:2], n = 100))

И вы получаете data.frame такого типа:

> str(top100)
'data.frame':   100 obs. of  2 variables:
 $ Sepal.Length: num  7.9 7.7 7.7 7.7 7.7 7.6 7.4 7.3 7.2 7.2 ...
 $ Sepal.Width : num  3.8 3.8 2.6 2.8 3 3 2.8 2.9 3.6 3.2 ...

> head(top100)
    Sepal.Length Sepal.Width
132          7.9         3.8
118          7.7         3.8
119          7.7         2.6
123          7.7         2.8
136          7.7         3.0
106          7.6         3.0

И тогда, если вы замышляете:

library(ggplot2)
ggplot(top100, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point()

введите здесь описание изображения

Предупреждение На основании того, что вы указали в своем примере, я предлагаю вам сделать следующее:

top100 <- as.data.frame(head(games[order(games$NA_Sales,decreasing=TRUE),c("Year","Global_Sales")], 100))

Однако, если это вас не устраивает, вам следует рассмотреть возможность предоставления воспроизводимого примера вашего набора данных Как сделать отличный воспроизводимый пример R

person dc37    schedule 15.12.2019