0

我正在使用以下代码创建一个带有 ggplot2 的饼图,其中包含两个彼此相邻的饼图:一个用于“MotT”的每个值。每个饼图需要如何为每个“模型”分配比例。这是我的代码:

library(ggplot2)
library(sqldf)


df <- data.frame("MorT" = c(1,2,1,2), "Model" = c(1,1,2,2),
             "Values" = c(length(outOfTime1withIns[,1]), 
                          length(outOfMem1withIns[,1]),
                          length(outOfTime1noIns[,1]),
                          length(outOfMem1noIns[,1])))



df=sqldf("select Values,
     CASE WHEN MorT==1 THEN 'Insuficient Time'
          WHEN MorT==2 THEN 'Insuficient Memory'
     END MorT,
     CASE WHEN Model==1 THEN '1) FSM1 with Insertion Dominance' 
          WHEN Model==2 THEN '2) FSM1 without Insertion Dominance' 
     END Model from df")

p = ggplot(data=df, 
       aes(x=factor(1),
           y=Summary,
           fill = factor(Model)
       )
)

尝试运行 "df=sqldf("select..."

Error in sqliteExecStatement(con, statement, bind.data) : 
RS-DBI driver: (error in statement: near "Values": syntax error)

当然 p 是空的。我明白了

Error: No layers in plot

如果我尝试调用它。

任何帮助将不胜感激!谢谢

4

2 回答 2

3

'Values' 是 SQL 中的关键字,因此您不能将其用作变量名。将其更改为“值”或数据框中的其他内容,这应该对 SQL 错误进行排序。

看起来您正在关注http://www.r-chart.com/2010/07/pie-charts-in-ggplot2.html上的示例。

首先,您的 ggplot 中有 y = Summary,需要将其更新为代码的“值”。

接下来,您使用的数据似乎存在问题(我没有 outOfMem1noIns,所以我制作了测试数据),但您应该确保每个 MorT 的值总和为 1。

然后教程页面上的代码应该可以工作(可能带有一些警告消息......)

于 2013-08-15T11:41:59.010 回答
1

如错误所述,SQL 语句有语法错误。此外,ggplot2 错误来自您没有添加几何图形的事实,例如geom_point

p = ggplot(data=df, 
       aes(x=factor(1),
           y=Summary,
           fill = factor(Model)
       )
) + geom_point()
于 2013-08-15T10:52:52.573 回答