【转载自新浪微博 蔡捕头的博客 http://blog.sina.com.cn/editcai】ggplot2修改坐标

来源:互联网 发布:java有哪些框架 编辑:程序博客网 时间:2024/05/16 23:25

用ggplot2绘图很漂亮,但是,要修改这些图形可不大好办,一些在Excel中很容易的操作,在R中要把人给急死,比如修改坐标的文字、调整坐标轴间隔、添加标签、控制标签格式,改个图例等等,都要查老半天资料。因为ggplot的图形要修改其中的各个零件,需要调用不同的函数,每个函数又要调用各种各样的参数,刚入手时不熟悉这些内容,会很花时间,要多练习,多尝试,才能逐渐上手。

我将陆续把ggplot2绘图的格式修改方面的经验归纳成笔记,一方面加强自己的记忆,另一方面也给需要的人提供参考。ggplot2的绘图很灵活,体现在几个大的方面,包括图形类型多、图形可叠加、各个部件可修改。其中最大的特色是图形可叠加,有点像PS中的图层,可以一层层画上去。不过繁琐的是每个图形都要用程序语句来实现,需要掌握绘图语法,得折腾。目前国内的书籍讲解得比较多的是语法、统计,绘图讲得较少,并且多数是在讲绘图的类型,很少讲如何修改图形的格式,这方面不得不大量地google。好了,不多说,开始讲笔记。

1、修改坐标的函数

修改坐标的这类属性,要用到theme()函数,例句如下:

gg<-ggplot(diamonds)

gg+geom_bar(aes(price,fill=cut)) +theme(axis.text.x=theme_text(family="myFont2",face="bold",size=10,angle=45,color="red"))

效果如下:

解释如下:

  • 本图用内置的diamond数据,随便做了个bar图
  • 凡事要修改坐标文字的格式,都加一句来修改:theme(axis.text.x=theme_text(X轴属性),asix.text.y=theme_text(Y轴属性))
  • theme_text()是存储文字属性的函数,其内置属性如下:
    • family:字体
    • face:粗体、斜体等
    • size:字体大小
    • angle:倾斜角度
    • color:颜色

2、修改字体

其实就算知道可以用theme_text()修改属性,要改起来也是麻烦的事情,因为不知道内置属性的关键字有哪些。比如改字体,直接用"family="宋体""是不会改不了字体的。要提前设置一下字体:

windowsFonts(myFont1=windowsFont("Times NewRoman"),myFont2=windowsFont("华文行楷"))

然后才可以用family来修改字体

Family="myfont1"

3、修改字体粗细

Face可以设置的属性有以下几个:

  • plain:普通
  • italic:斜体
  • bold:粗体
  • bold.italic:粗体+斜体

4、修改尺寸大小

这个比较简单,用数字代表字体大小即可,普通的字体可以设置为size=8。

5、修改角度

这个也比较简单,用数字代表角度大小,比如上图的angle=45,表示字体逆时针倾斜45°。范围是0-360。

7、修改颜色

color或者colour都可以修改颜色,颜色用关键字来表示,或者用十六进制的颜色代码来表示。当然最简单的是用关键字来表示颜色,简单明白清楚,但是您可能会发现很难找到ggplot2可以设置的颜色单词。还好经过一番google,找到下图,以后设置颜色不用担心了,有参考了:

8、修改位置

修改位置用下面的参数:

hjust:调整横向位置

vjust:调整纵向位置

上面都设置数字,一般调整0.5左右,可以是负值。


9、修改坐标轴的显示范围

先看下图:

这是中美两国历年人口平均预期寿命变化趋势对比图,显示的范围是从1900年到2008年,用以下语句生成:

gg+geom_line(aes(年份,寿命,color=国家,alpha=1/3),size=2)+labs(title="近代中美人口寿命变化情况")

如果只想显示从1950年到2009年的数据,那么修改X轴的显示范围,用scale_x_continuous()函数的limits参数,语句如下:

gg+geom_line(aes(年份,寿命,color=国家,alpha=1/3),size=2)+

    labs(title="近代中美人口寿命变化情况")+

    scale_x_continuous(limits=c(1950,2000))

效果如下:

还有个简化语句:ylim(1950,2000),也是同样的效果。

10、修改坐标的显示刻度

仍然用scale_x_continuous()函数,这次的参数是limits,下图把每一年都显示到坐标上,我把字体稍微调小了一点,否则太难看:

gg+geom_line(aes(年份,寿命,color=国家,alpha=1/3),size=2)+

    labs(title="近代中美人口寿命变化情况")+

    scale_x_continuous(limits=c(1950,2000),breaks=mydata$年份)+

    theme(axis.text.x=theme_text(angle=45,size=5))

效果如下:

可以看到,每一年都显示出来,但即使字体调小,还是显得密密麻麻,看不清楚。如果每隔5年显示一次年份,效果就会好很多,这涉及到调整坐标显示间隔的问题,还是要用到breaks参数,并且要用seq(起始值,终止值,间隔)函数来设置间隔,语句如下:

gg+geom_line(aes(年份,寿命,color=国家,alpha=1/3),size=2)+

    labs(title="近代中美人口寿命变化情况")+

    scale_x_continuous(limits=c(1950,2000),breaks=seq(1950,2000,5))+

    theme(axis.text.x=theme_text(angle=45,size=8))

效果如下:


阅读全文
0 0
原创粉丝点击