GGPlot2:错误:美学的长度必须为1或与数据(16)相同:x,y,group [英] GGPlot2: Error: Aesthetics must be either length 1 or the same as the data (16): x, y, group

查看:66
本文介绍了GGPlot2:错误:美学的长度必须为1或与数据(16)相同:x,y,group的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我认为简单的折线图的代码

  ggplot(data = top15andAllDatasummary.df,aes(x = years,y = calculations,group = 1))+geom_line()+geom_point() 

我得到了这个错误:

错误:美学的长度必须为1或与数据(16)相同:x,y,组

我在r的数据框中有数据.我的X轴将是几年,而Y轴将是我每年构建的一些计算(其中有16项).

编辑后添加

  structure(list(`2001` = c(349.315750645518,217.47436370343,5.17963850977499,126.661748432313,57,39),`2002` = c(703.26693877551,429.92,9.32897959183673,264.017959183673,161,108),`2003` = c(314.897774687065,193.792420027816、4.08936022253129、117.015994436718、54、37),'2004'= c(305.988451086957,190.680027173913,3.87839673913043,111.430027173913,55,38),'2005'= c(118.528015659408,74.3175923660387,1.50942011255199,42.7010031808172,10,8),`2006` = c(120.531992244304,73.8279205041202、1.54362578768783、45.1604459524964、10,8),`2007` = c(113.973899988451,69.7619817530893,1.44693382607691,42.7649844092851,10,8),`2008` = c(110.676242590059,67.3693570451436,1.36285909712722,41.9440264477884,9,7),'2009'= c(101.965558714192,63.1446534003936、1.22982724688388、37.5910780669145、97),`2010` = c(93.9744360902256,59.8894736842105,1.14199785177229,32.9429645542427,9,7),`2011` = c(91.8911316298046,58.5660296328108,1.15675327464033,32.1683487223534,9,7),'2012'= c(91.2302181013592,58.598356337583、1.16773785691708、31.4641239068591、8、6),'2013` = c(87.1390443392165,55.0509040034438,1.10277658200603,30.9853637537667,8,6),`2014` = c(85.7812132234942,56.0456831068792,1.09725045469134,28.6382796619236,8,6),`2015` = c(88.331452900479,58.526237360298、1.22362959020756、28.5815859499734、8、6)),.names = c("2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013"​​,"2014","2015"),row.names = c("AllDataMeanByYear","AllDataMeanAggAssault","AllDataMeanMurderManSlaughter","AllDataMeanRobbery","AllDataMedianByYear","AllDataMedianAggAssault"),类="data.frame")所有代码:## 全部的lwdata $ total<-lwdata $ murdermanslaughter + lwdata $ Robbery + lwdata $ Aggravated_assault##数据计算排名前15top15<-lwdata [lwdata $ total> = lwdata $ total [order(lwdata $ Year,lwdata $ total,减少= TRUE)] [15],]##前15个均值Top15MeanByYear<-tapply(前15个总计,前15个年度,平均)Top15MeanAggAssault<-tapply(top15 $ Aggravated_assault,top15 $ Year,mean)Top15MeanMurderManSlaughter<-tapply(Top15 $ murdermanslaughter,top15 $ Year,mean)Top15MeanRob<-tapply(top15 $ Robbery,top15 $ Year,mean)##所有数据均值AllDataMeanByYear<-tapply(lwdata $ total,lwdata $ Year,mean)AllDataMeanAggAssault<-tapply(lwdata $ Aggravated_assault,lwdata $ Year,mean)AllDataMeanMurderManSlaughter<-tapply(lwdata $ murdermanslaughter,lwdata $ Year,mean)AllDataMeanRobbery<-tapply(lwdata $ Robbery,lwdata $ Year,mean)##排名前15位的中位数Top15MedianByYear<-tapply(total15toptotal,top15 $ Year,median)Top15MedianAggAssault<-tapply(top15 $ Aggravated_assault,top15 $ Year,median)Top15MedianMurderManSlaughter<-tapply(top15 $ murdermanslaughter,top15 $ Year,median)Top15MedianRob<-tapply(top15 $ Robbery,top15 $ Year,median)##所有数据中位数AllDataMedianByYear<-tapply(lwdata $ total,lwdata $ Year,median)AllDataMedianAggAssault<-tapply(lwdata $ Aggravated_assault,lwdata $ Year,median)AllDataMedianMurderManSlaughter<-tapply(lwdata $ murdermanslaughter,lwdata $ Year,median)AllDataMedianRobbery<-tapply(lwdata $ Robbery,lwdata $ Year,median)##将数据舍入到两个小数点Top15MeanByYear<-回合(Top15MeanByYear,digits = 2)Top15MeanAggAssault<-回合(Top15MeanAggAssault,digits = 2)Top15MeanMurderManSlaughter<-回合(Top15MeanMurderManSlaughter,digits = 2)Top15MeanRob<-回合(Top15MeanRob,digits = 2)AllDataMeanByYear<-回合(AllDataMeanByYear,digits = 2)AllDataMeanAggAssault<-回合(AllDataMeanAggAssault,digits = 2)AllDataMeanAggAssault<-回合(AllDataMeanAggAssault,digits = 2)AllDataMeanRobbery<-回合(AllDataMeanRobbery,digits = 2)Top15MedianByYear<-回合(Top15MedianByYear,digits = 2)Top15MedianAggAssault <-回合(Top15MedianAggAssault,digits = 2)Top15MedianMurderManSlaughter<-回合(Top15MedianMurderManSlaughter,digits = 2)Top15MedianRob<-回合(Top15MedianRob,digits = 2)AllDataMedianByYear<-回合(AllDataMedianByYear,digits = 2)AllDataMedianAggAssault<-回合(AllDataMedianAggAssault,digits = 2)AllDataMedianMurderManSlaughter<-回合(AllDataMedianMurderManSlaughter,digits = 2)AllDataMedianRobbery<-回合(AllDataMedianRobbery,digits = 2)##摘要AllDataSummary<-rbind(AllDataMeanByYear,AllDataMeanAggAssault,AllDataMeanMurderManSlaughter,AllDataMeanRobbery,AllDataMedianByYear,AllDataMedianAggAssault,AllDataMedianMurderManSlaughter,AllDataMedianRobbery)Top15Summary<-rbind(Top15MeanByYear,Top15MeanAggAssault,Top15MeanMurderManSlaughter,Top15MeanRob,Top15MedianByYear,Top15MedianAggAssault,Top15MedianMurderManSlaughter,Top15MedianRob)Top15和AllDatasummary<-rbind(AllDataSummary,Top15Summary)##新项目类别类(AllDataSummary)类(Top15摘要)类别(top15andAllDatasummary)##将矩阵转换为数据帧AllDataSummary.df<-as.data.frame(AllDataSummary)Top15Summary.df<-as.data.frame(Top15Summary)Top15andAllDatasummary.df <-as.data.frame(Top15andAllDatasummary)##检查新班类(AllDataSummary.df)类别(Top15Summary.df)类别(Top15andAllDatasummary.df)##验证新组件的名称列名(Top15andAllDatasummary.df)行名(Top15andAllDatasummary.df)##新组件年<-姓氏(Top15andAllDatasummary.df)计算<-colnames(Top15andAllDatasummary.df)## 芝加哥芝加哥<-top15 [which(top15 $ City =="Chicago"),]##基本图情节(y = Chicago $ total,x = Chicago $ Year,type ="l",xlab ="Year",ylab =总暴力犯罪(减去强奸)",main =芝加哥特定数据",col =蓝色的")##芝加哥的数据类型str(芝加哥) 

链接到完整的> 100K数据集是

Here is the code I have for what I thought was a simple line graph

ggplot(data=top15andAllDatasummary.df, aes(x=years, y=calculations, group=1)) +
    geom_line() +
    geom_point()

And I got this error:

Error: Aesthetics must be either length 1 or the same as the data (16): x, y, group

I have data in a dataframe in r. My X-Axis was going to be years and the Y-axis was going to be some calculations (16 of them) I constructed per year.

Edited to add

structure(list(`2001` = c(349.315750645518, 217.47436370343, 
5.17963850977499, 126.661748432313, 57, 39), `2002` = c(703.26693877551, 
429.92, 9.32897959183673, 264.017959183673, 161, 108), `2003` = c(314.897774687065, 
193.792420027816, 4.08936022253129, 117.015994436718, 54, 37), 
    `2004` = c(305.988451086957, 190.680027173913, 3.87839673913043, 
    111.430027173913, 55, 38), `2005` = c(118.528015659408, 74.3175923660387, 
    1.50942011255199, 42.7010031808172, 10, 8), `2006` = c(120.531992244304, 
    73.8279205041202, 1.54362578768783, 45.1604459524964, 10, 
    8), `2007` = c(113.973899988451, 69.7619817530893, 1.44693382607691, 
    42.7649844092851, 10, 8), `2008` = c(110.676242590059, 67.3693570451436, 
    1.36285909712722, 41.9440264477884, 9, 7), `2009` = c(101.965558714192, 
    63.1446534003936, 1.22982724688388, 37.5910780669145, 9, 
    7), `2010` = c(93.9744360902256, 59.8894736842105, 1.14199785177229, 
    32.9429645542427, 9, 7), `2011` = c(91.8911316298046, 58.5660296328108, 
    1.15675327464033, 32.1683487223534, 9, 7), `2012` = c(91.2302181013592, 
    58.598356337583, 1.16773785691708, 31.4641239068591, 8, 6
    ), `2013` = c(87.1390443392165, 55.0509040034438, 1.10277658200603, 
    30.9853637537667, 8, 6), `2014` = c(85.7812132234942, 56.0456831068792, 
    1.09725045469134, 28.6382796619236, 8, 6), `2015` = c(88.331452900479, 
    58.526237360298, 1.22362959020756, 28.5815859499734, 8, 6
    )), .Names = c("2001", "2002", "2003", "2004", "2005", "2006", 
"2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", 
"2015"), row.names = c("AllDataMeanByYear", "AllDataMeanAggAssault", 
"AllDataMeanMurderManSlaughter", "AllDataMeanRobbery", "AllDataMedianByYear", 
"AllDataMedianAggAssault"), class = "data.frame")


All Code:

 ## Total
lwdata$total <- lwdata$murdermanslaughter + lwdata$Robbery +    lwdata$Aggravated_assault
## Data Calculations Top 15
top15 <- lwdata[lwdata$total >= lwdata$total[order(lwdata$Year, lwdata$total, decreasing=TRUE)][15] , ]
## Top 15 Means
Top15MeanByYear <- tapply(top15$total,top15$Year,mean)
Top15MeanAggAssault <- tapply(top15$Aggravated_assault,top15$Year,mean)
Top15MeanMurderManSlaughter <- tapply(top15$murdermanslaughter,top15$Year,mean)
Top15MeanRob <- tapply(top15$Robbery,top15$Year,mean)
## All Data Means
AllDataMeanByYear <- tapply(lwdata$total,lwdata$Year,mean)
AllDataMeanAggAssault <- tapply(lwdata$Aggravated_assault,lwdata$Year,mean)
AllDataMeanMurderManSlaughter <- tapply(lwdata$murdermanslaughter,lwdata$Year,mean)
AllDataMeanRobbery <- tapply(lwdata$Robbery,lwdata$Year,mean)
## Top 15 Medians
Top15MedianByYear <- tapply(top15$total,top15$Year,median)
Top15MedianAggAssault <- tapply(top15$Aggravated_assault,top15$Year,median)
Top15MedianMurderManSlaughter <- tapply(top15$murdermanslaughter,top15$Year,median)
Top15MedianRob <- tapply(top15$Robbery,top15$Year,median)
## All Data Medians
AllDataMedianByYear <- tapply(lwdata$total,lwdata$Year,median)
AllDataMedianAggAssault <- tapply(lwdata$Aggravated_assault,lwdata$Year,median)
AllDataMedianMurderManSlaughter <-  tapply(lwdata$murdermanslaughter,lwdata$Year,median)
AllDataMedianRobbery <- tapply(lwdata$Robbery,lwdata$Year,median)
## Rounding Data To Two Decimal Points
Top15MeanByYear <- round(Top15MeanByYear,digits=2)
Top15MeanAggAssault <- round(Top15MeanAggAssault,digits=2)
Top15MeanMurderManSlaughter <- round(Top15MeanMurderManSlaughter,digits=2)
Top15MeanRob <- round(Top15MeanRob,digits=2)
AllDataMeanByYear <- round(AllDataMeanByYear,digits=2)
AllDataMeanAggAssault <- round(AllDataMeanAggAssault,digits=2)
AllDataMeanAggAssault <- round(AllDataMeanAggAssault,digits=2)
AllDataMeanRobbery <- round(AllDataMeanRobbery,digits=2)
Top15MedianByYear <- round(Top15MedianByYear,digits=2)
Top15MedianAggAssault <- round(Top15MedianAggAssault,digits=2)
Top15MedianMurderManSlaughter <- round(Top15MedianMurderManSlaughter,digits=2)
Top15MedianRob <- round(Top15MedianRob,digits=2)
AllDataMedianByYear <- round(AllDataMedianByYear,digits=2)
AllDataMedianAggAssault <- round(AllDataMedianAggAssault,digits=2)
AllDataMedianMurderManSlaughter <-     round(AllDataMedianMurderManSlaughter,digits=2)
AllDataMedianRobbery <- round(AllDataMedianRobbery,digits=2)
## Summaries
AllDataSummary <- rbind(AllDataMeanByYear, AllDataMeanAggAssault, AllDataMeanMurderManSlaughter, AllDataMeanRobbery, AllDataMedianByYear, AllDataMedianAggAssault, AllDataMedianMurderManSlaughter, AllDataMedianRobbery)
Top15Summary <- rbind(Top15MeanByYear, Top15MeanAggAssault, Top15MeanMurderManSlaughter, Top15MeanRob,Top15MedianByYear,Top15MedianAggAssault,Top15MedianMurderManSlaughter,Top15MedianRob)
Top15andAllDatasummary <- rbind(AllDataSummary,Top15Summary)
## Class of New Items
class(AllDataSummary)
class(Top15Summary)
class(top15andAllDatasummary)
## Converting Matrices to Data Frames
AllDataSummary.df <- as.data.frame(AllDataSummary)
Top15Summary.df <- as.data.frame(Top15Summary)
Top15andAllDatasummary.df <- as.data.frame(Top15andAllDatasummary)
## Checking of New Classes
class(AllDataSummary.df)
class(Top15Summary.df)
class(Top15andAllDatasummary.df)
## Verifications for Names of New Components
colnames(Top15andAllDatasummary.df)
rownames(Top15andAllDatasummary.df)
## New Components
years <- colnames(Top15andAllDatasummary.df)
calculations <- colnames(Top15andAllDatasummary.df)
## Chicago
Chicago <- top15[which(top15$City=="Chicago"), ] 
## Basic Plots
plot(y=Chicago$total, x=Chicago$Year, type="l", xlab = "Year", ylab = "Total       Violent Crime (minus rape)", main="Chicago-Specific Data", col="blue")
## Data Types for Chicago
str(Chicago)

link to full >100K set of data is here

解决方案

Your data frame (let's call it df) has a column for each year, and rownames for each of your calculated variables. This is "wide" data, where each row has multiple data values. ggplot is meant to work with "long" data, in which each row has a single column containing a data value, and other columns that tell us things about that data point (i.e., what variable the data point represents and what year it's from.

The tidyverse library of packages, by Hadley Wickham (who also wrote ggplot), makes it easy to transform data from wide to long and back again.

library(tidyverse)

df.new <- mutate(df, variable = rownames(df)) %>% 
    gather(year, value, -variable)

                        variable year      value
1              AllDataMeanByYear 2001 349.315751
2          AllDataMeanAggAssault 2001 217.474364
3  AllDataMeanMurderManSlaughter 2001   5.179639
4             AllDataMeanRobbery 2001 126.661748
5            AllDataMedianByYear 2001  57.000000
6        AllDataMedianAggAssault 2001  39.000000
7              AllDataMeanByYear 2002 703.266939
8          AllDataMeanAggAssault 2002 429.920000
9  AllDataMeanMurderManSlaughter 2002   9.328980
10            AllDataMeanRobbery 2002 264.017959
11           AllDataMedianByYear 2002 161.000000
12       AllDataMedianAggAssault 2002 108.000000
13             AllDataMeanByYear 2003 314.897775
14         AllDataMeanAggAssault 2003 193.792420
15 AllDataMeanMurderManSlaughter 2003   4.089360
16            AllDataMeanRobbery 2003 117.015994
17           AllDataMedianByYear 2003  54.000000
18       AllDataMedianAggAssault 2003  37.000000
19             AllDataMeanByYear 2004 305.988451
20         AllDataMeanAggAssault 2004 190.680027
... and 70 more rows

This long data can then be sent to ggplot. Note that your original attempt used a variable called "years", which did not exist in the data frame. R (and ggplot) have no way of knowing that your column names (2001:2015) somehow magically represent years.

plot.years <- ggplot(data = df.new, aes(x = year, y = value, color = variable, group = variable)) +
    geom_line()
print(plot.years)

这篇关于GGPlot2:错误:美学的长度必须为1或与数据(16)相同:x,y,group的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆