Your code block looks fine to me. The typical R code block headers I use is as follows:
:session :results output graphics :file path/to/file.png :exports results :eval never-export One thing I've noticed, if I have an existing graphics device open, it can mess up plots when executing an org-babel cell. Calling dev.off() a few times fixes this for me. Note I pretty much always use R blocks with the :session argument, things might be pretty different without it.