使用Rmarkdown时ggplot图显示为空

时间:2018-07-22 13:41:16

标签: r ggplot2

我在将ggplot与Rmarkdown结合使用时遇到问题。 我有一个应该返回ggplot图的代码。当我在R会话中执行该代码时,它可以工作,但是使用R markdown时,同一代码将返回一个空图。这是我在R会话中使用的代码

    m<-ggplot(data=t,aes_string(x=v,y =t$cnt_pct))
m+geom_bar(stat = "identity",fill="#FF0000",color='black')+geom_text(aes(label = cnt_pct),vjust=-0.2)+ggtitle(paste(v,paste("graph")))+theme(plot.title = element_text(hjust = 0.5))+ylab("percent")+geom_line(aes_string(x=v,y =t$keshel_pct),group=1,size=2) 

这是我在Rmarkdown中使用的代码

m<-ggplot(data=t,aes_string(x=v,y =t$cnt_pct))
m+geom_bar(stat = "identity",fill="#FF0000",color='black')+geom_text(aes(label = cnt_pct),vjust=-0.2)+ggtitle(paste(v,paste("graph")))+theme(plot.title = element_text(hjust = 0.5))+ylab("percent")+geom_line(aes_string(x=v,y =t$keshel_pct),group=1,size=2) 
plot(m)

两者之间的唯一区别是使用Rmarkwond添加了plot(m)线。 由于某些原因,plot命令使图形为空,当我删除它并运行Rmarkdown时,不会返回任何图形。

这是空的图

enter image description here

这是在R会话中工作的图形

enter image description here

有人知道我的错误是什么吗?

任何帮助都将得到

1 个答案:

答案 0 :(得分:1)

您在这里遇到一些问题:

1)您的绘图语法有问题。 aes_string采用表示列名称的字符串,但是您要为x传递变量v,而为y传递直接列数据t$cnt_pnt。查看一些ggplot示例以获取正确的语法。

2)plot(m)语句不起作用的原因有两个:首先,您print个ggplot对象,而不是plot个对象。其次,您没有将m + geom_bar(...)语句分配给任何内容,因此即使您的plot语句确实起作用,您也可以在没有geom_bar(...)的情况下获得情节。尝试例如改为y = m+ geom_bar(...); print(y)