gpt4 book ai didi

r - ggplot2 : Aesthetics must either be length one, 或相同长度的几张图

转载 作者:行者123 更新时间:2023-12-01 00:57:05 25 4
gpt4 key购买 nike

我使用以下数据集(可下载 here)和代码(下方)尝试在一个 ggplot 中绘制多个图形。我知道那里有很多解释,但我似乎仍然没有完成工作,因为我对在哪里放置 ggplot 命令以了解我想要什么感到困惑。

此外,我知道原始数据可以通过两种方式呈现:宽格式或长格式。当我将数据保存在 宽幅我必须写很多才能完成工作(请参阅下面的代码和图表),但是当我将其转换为 时长格式 , ggplot 提示缺少值(请参阅下面的代码和错误消息)。

这是我的最小代码示例:

library(ggplot2) # for professional graphs
library(reshape2) # to convert data to long format

WDI_GDP_annual <- WDI[which(WDI$Series.Name=='GDP growth (annual %)'),] # extract data I need from dataset
WDI_GDP_annual_short <- WDI_GDP_annual[c(-1,-2,-4)] # wide format
test_data_long <- melt(WDI_GDP_annual_short, id = "Time") # long format

# (only successful) graph with wide format data
ggplot(WDI_GDP_annual_short, aes(x = Time)) +
geom_line(aes(y = Brazil..BRA., colour = "Brazil..BRA.", group=1)) +
geom_line(aes(y = China..CHN., colour = "China..CHN.", group=1)) +
theme(legend.title = element_blank())

# several graphs possibilities to plot data in long format and to have to write less (but all complain)
ggplot(data=test_data_long, aes(x = time, y = value, colour = variable)) +
geom_line() +
theme(legend.title = element_blank())

ggplot(data=test_data_long, aes(x = time, y = value, color = factor(variable))) +
geom_line() +
theme(legend.title = element_blank())

ggplot(test_data_long, aes(x = time, y = value, colour = variable, group = variable)) +
geom_line()

这是迄今为止我得到的(唯一)成功的情节,但我不想写这么多(因为我想在这个 ggplot 中再有 6 个图):

enter image description here

我知道使用长格式将意味着一种更优雅的方式来绘制多图,但我使用的任何命令(见上文)我总是收到以下提示:

Error: Aesthetics must either be length one, or the same length as the dataProblems:time



有人知道我的问题的答案吗?

最佳答案

首先:您的数据在您所谓的数字列中有字符串“..”,这会将整个列转换为 class character (或 factor ,取决于您的 stringsAsFactors 设置)。

如果您希望将“..”视为 NA , 添加 na.strings = ".."给您的 read.xxx称呼。这将确保列被视为 numeric . str阅读任何数据集后,应该成为您的 friend 。

library(reshape2)
library(ggplot2)

df <- read.csv(file = "https://dl.dropboxusercontent.com/u/109495328/WDI_Data.csv",
na.strings = "..")
str(df)

# compare with
# df <- read.csv(file = "https://dl.dropboxusercontent.com/u/109495328/WDI_Data.csv")
# str(df)


# melt relevant part of the data
df2 <- melt(subset(df,
subset = Series.Name == "GDP growth (annual %)",
select = -c(Time.Code, Series.Code)),
id.vars = c("Series.Name", "Time"))

ggplot(df2, aes(x = Time, y = value, colour = variable, group = variable)) +
geom_line()

enter image description here

关于r - ggplot2 : Aesthetics must either be length one, 或相同长度的几张图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26863844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com