2015-03-18 78 views
3

我有以下的数据帧结构使用GGPLOT2与有空格他们的名字列

df <- as.data.frame(A) 
colnames(df)<- c("Sum of MAE", "Company") 
df <- na.omit(df) 
df2 <- df[order(df[,1]),] 
df2 <- head(df2, n=10) 
ggplot(df2, aes_string("Sum of MAE", "Company", group=1) + geom_line()) 
print(df2) 

这是数据

Sum of MAE Company 
606 0.030156758080105 COCO 
182 0.0600065426668421 APWC 
836 0.0602272459239397  EDS 
1043 0.0704327240953608 FREE 
2722    0.09 VLYWW 
1334 0.0900000000000001 IKAN 
2420 0.104746328560384  SPU 
860 0.106063964745531 ELON 
2838 0.108373386847075 WTSL 
1721 0.110086738825851 MTSL 

的ggplot犯规的结构似乎工作。经过一连串的错误,目前我得到的是

Error in parse(text = x) : <text>:1:5: unexpected symbol 
1: Sum of 

有人可以帮助我获得ggplot 2的工作。

+0

分享您的数据'dput(DF2)'所以我们可以看到底层结构和类。 – Gregor 2015-03-18 22:14:48

+0

这是巨大的,不适合在这里。 – Jumper 2015-03-18 22:16:42

+1

然后对头6行执行'dput(head(df2))'。此外,[这个问题也是你](http://stackoverflow.com/q/29127222/903061)?为什么这两个账户?正如在这个问题中,我猜你需要指定'x'轴是公司。通过将其放在第二位,您将默认为y轴。 – Gregor 2015-03-18 22:17:40

回答

5

呃,这就是为什么你应该总是确保你有有效的列名。首先,这里是一个容易重现的版本的数据集的

df2 <- data.frame(`Sum of MAE` = c(0.030156758080105, 0.0600065426668421, 
    0.0602272459239397, 0.0704327240953608, 0.09, 0.0900000000000001, 
    0.104746328560384, 0.106063964745531, 0.108373386847075, 0.110086738825851 
    ), Company = c("COCO", "APWC", "EDS", "FREE", "VLYWW", "IKAN", "SPU", "ELON", 
    "WTSL", "MTSL"), check.names=F) 

ggplot(df2, aes_string("Sum of MAE", "Company", group=1) + geom_line()) 
# Error in parse(text = x) : <text>:1:5: unexpected symbol 
# 1: Sum of 
#  ^

的问题是,aes_string()使用parse()把你的文字表达到合适的[R符号可以在data.frame内解决。当你解析不合法的R语法的“MAE总和”时,也就是说,它不会解析为单个漂亮的符号名称。如果你使用这样的“坏”名字,你可以用反码将它们转义,将表达式(空格和全部)当作符号。所以,你可以做

ggplot(df2, aes_string("`Sum of MAE`", "Company", group=1)) + geom_line() 
# or 
ggplot(df2, aes(`Sum of MAE`, Company, group=1)) + geom_line() 

但实际上它会更好地坚持使用有效的列名称为您data.frame而不是colnames绕过检查()。

如果要更改列名以获得“更好”的轴标签,则应该使用xlab()来代替。例如

df3 <- data.frame(df2) 
names(df3) 
# [1] "Sum.of.MAE" "Company" 
ggplot(df3, aes(Sum.of.MAE, Company, group=1)) + 
    geom_line() + 
    xlab("Sum of MAE values") 
+0

我将名称更改为“Sum”,现在得到的错误是aes_string(“Sum”,“Company”,group = 1)中的错误+ geom_line(): 对二元运算符的非数字参数 – Jumper 2015-03-18 22:26:15

+0

嗯,你在原始示例中也有括号问题。试试我编写的代码,并将其与您正在运行的代码进行比较。 – MrFlick 2015-03-18 22:27:22

+0

感谢此代码似乎工作,从意义上说我没有得到任何错误。但是我没有看到R Studio的情节部分有任何情节。任何想法为什么? – Jumper 2015-03-18 22:29:53

0

不知道你想要绘制什么,这里是一个开始(和其他人可能会更好地理解)。

df <- read.table(textConnection(" 
           606 0.030156758080105 COCO 
           182 0.0600065426668421 APWC 
           836 0.0602272459239397  EDS 
           1043 0.0704327240953608 FREE 
           2722    0.09 VLYWW 
           1334 0.0900000000000001 IKAN 
           2420 0.104746328560384  SPU 
           860 0.106063964745531 ELON 
           2838 0.108373386847075 WTSL 
           1721 0.110086738825851 MTSL")) 
colnames(df) <- c("sum", "MAE", "Company") 
ggplot(df, aes(x=Company, y=MAE, group = 1)) + 
    geom_line() 

enter image description here

相关问题