我试图运行一段非常简单的代码,以便为作业创建ggplot。我是R的新手,所以我怀疑这是一个简单的问题,但现在我只是在努力。我的教授实际上是写了这段代码,并且已经为其他与我交谈过的学生工作过。但是,我遇到一个错误,这很令人困惑。
部分问题可能是我以前曾试图将ggplot强制转换为数据帧(因为一段时间以来我并没有完全意识到ggplot的确切含义),并将其命名为gg。
自从我开始作业以来,这行代码一直崩溃 注意:这是我的教授提供的代码,可为其他人使用
ggplot(filter(gapminder, gapminder$year==1987, group=1)) + geom_point(aes(gdpPercap, lifeExp, color=continent, size=pop)) + xlab("GDP per capita") + ylab("Life expectancy at birth")
我尝试使用以下方法将ggplot强制转换为数据框:
gg = as.data.frame(ggplot)
显然这没有用或没有帮助,但是从文件中删除此代码后,它可能仍会影响前一行代码?
我至少希望有某种情节,但是却出现以下错误:
as.data.frame.default(x [[i]]中的错误,可选= TRUE, stringsAsFactors = stringsAsFactors):不能强制类“ c(“ gg”, “ ggplot”)”添加到data.frame
任何帮助将不胜感激!
答案 0 :(得分:1)
ggplot
将数据框作为其输入,并创建一个绘图对象,其中包含许多与生成该数据的所有参数相对应的片段。尽管从ggplot中提取数据在技术上是可行的,但它有点复杂,可能不在介绍性会议中。 (有关示例,请参见底部。)
根据我所见过的其他ggplot
教程(例如其创建者的this one),更典型的做法是先显示数据帧的输入,并显示如何过滤数据变化情节。
这是一个应该起作用的过程。如果对您不起作用,请分享您收到的所有特定错误消息。
library(ggplot2)
library(gapminder)
library(dplyr) # I think this is the source of the "filter" function used here
gapminder
数据,具有1,704行。数据中的每个国家/地区每年都有一行,例如1952、1957等。> gapminder
# A tibble: 1,704 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779.
2 Afghanistan Asia 1957 30.3 9240934 821.
3 Afghanistan Asia 1962 32.0 10267083 853.
4 Afghanistan Asia 1967 34.0 11537966 836.
5 Afghanistan Asia 1972 36.1 13079460 740.
6 Afghanistan Asia 1977 38.4 14880372 786.
7 Afghanistan Asia 1982 39.9 12881816 978.
8 Afghanistan Asia 1987 40.8 13867957 852.
9 Afghanistan Asia 1992 41.7 16317921 649.
10 Afghanistan Asia 1997 41.8 22227415 635.
# … with 1,694 more rows
group = 1
部分的用途–也许您的问题中没有提到更早的步骤?)# Note: equivalent to `filter(gapminder, year == 1957)`
> filter(gapminder, gapminder$year == 1957)
# A tibble: 142 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1957 30.3 9240934 821.
2 Albania Europe 1957 59.3 1476505 1942.
3 Algeria Africa 1957 45.7 10270856 3014.
4 Angola Africa 1957 32.0 4561361 3828.
5 Argentina Americas 1957 64.4 19610538 6857.
6 Australia Oceania 1957 70.3 9712569 10950.
7 Austria Europe 1957 67.5 6965860 8843.
8 Bahrain Asia 1957 53.8 138655 11636.
9 Bangladesh Asia 1957 39.3 51365468 662.
10 Belgium Europe 1957 69.2 8989111 9715.
# … with 132 more rows
ggplot
函数的第一项代表输入数据。 (我在这里省略了“ group = 1”,因为我不知道它的定义位置。该部分可能实际上属于aes(...)
部分吗?group = 1
有时在我们希望ggplot提供的地方使用一种统计信息,我们希望将整个数据集视为一个组,例如,如果要所有国家/地区的平均GDP而不是按洲划分的平均值...)ggplot(filter(gapminder, gapminder$year==1987)) +
geom_point(aes(gdpPercap, lifeExp, color=continent, size=pop)) +
xlab("GDP per capita") +
ylab("Life expectancy at birth")
这是我得到的输出。有打ic吗?
这是相同的情节,分配给名为gg
的对象:
gg <- ggplot(filter(gapminder, gapminder$year==1987)) +
geom_point(aes(gdpPercap, lifeExp, color=continent, size=pop)) +
xlab("GDP per capita") +
ylab("Life expectancy at birth")
该gg对象包含许多组件。在RStudio中,您可以检查它们并以交互方式提取组件。其中之一是源数据:
> gg[["data"]]
# A tibble: 142 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1987 40.8 13867957 852.
2 Albania Europe 1987 72 3075321 3739.
3 Algeria Africa 1987 65.8 23254956 5681.
4 Angola Africa 1987 39.9 7874230 2430.
5 Argentina Americas 1987 70.8 31620918 9140.
6 Australia Oceania 1987 76.3 16257249 21889.
7 Austria Europe 1987 74.9 7578903 23688.
8 Bahrain Asia 1987 70.8 454612 18524.
9 Bangladesh Asia 1987 52.8 103764241 752.
10 Belgium Europe 1987 75.4 9870200 22526.
# … with 132 more rows