【问题标题】:Plotting sales over time in R在 R 中绘制一段时间内的销售额
【发布时间】:2020-04-07 06:07:46
【问题描述】:

我试图按年份在散点图上显示前 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() 强制转换的对象,而不是数字向量

如果我使用实际的游戏数据集,我会附上情节。

有什么想法吗?

【问题讨论】:

  • as.data.frame(top100) 不能就地工作 - 你需要做 top100=as.data.frame(top100)
  • 谢谢,在那之后我得到了这个:错误:美学必须是长度1或与数据相同(100):x,y....这是否是由于当年的NA列?
  • 您能否使用dput 分享您的数据样本以重现您的问题?在ggplot 中,在geom_point 的这种情况下,缺少数据会给您一个警告并删除该行数据。

标签: r ggplot2 plot scatter-plot gplots


【解决方案1】:

正如@CMichael 在 cmets 中指出的那样,您的代码中有几个问题。 在没有可重现的例子的情况下,我使用了iris 数据集来解释你的代码有什么问题。

top100

这样做你只提取一列。

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之后绘制YearGlobal_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))

但是,如果您对此不满意,您应该考虑提供一个可重现的数据集示例How to make a great R reproducible example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多