瞬间集分享 http://blog.sciencenet.cn/u/yusufma 激光,光谱学,生物医学光子学

博文

谈谈gnuplot(三十七):柱状图

已有 21745 次阅读 2012-1-10 04:08 |个人分类:开源软件|系统分类:科研笔记|关键词:gnuplot,数学,画图,软件,histogram,柱状图,xticlabels,columnheader,rotate,boxwidth| 数学, 软件, 画图, Gnuplot, histogram

除了点线图外,柱状图也是一种常用的作图方式。我们还用前两讲用过的 "precipitation.dat“ 数据文件作例子:
gnuplot> set style data histogram
gnuplot> set style histogram clustered gap 1
gnuplot> set style fill solid 0.4 border
gnuplot> plot "precipitation.dat" using 2, '' using 3

set style data histogram 命令告诉 gnuplot 所有数据绘图都使用 histogram 风格。set style histogram 命令设置 histogram 作图的参数,例如 clustered 模式就是像上图那样,把几组数据并排画在一起,gap 1 就表示各簇数据之间空白的宽度等于数据柱宽度的 1 倍。填充风格命令(set style fill)上次我们已经介绍过了。

这里我们发现一个 histogram 和一般点线作图的不同:一般点线作图,每个图都要提供 x,y 两组数据,而 histogram 图只需要提供一组数据,每个数据自动画在 X 轴上的非负整数位置。这时候,X 轴上的标注并不是我们想要的,图例中的标注也不符合我们的要求。我们以前在“坐标取值范围及刻度”和“多组数据绘图”讲过,这两处的标注,可以分别用 set xtics 命令和 title 参数来设置。这里提供另一种改变标注的方法,我们把 "precipitation.dat“ 文件稍微修改一下:

### 文件开始 ###
# 各城市月平均降水量 (mm)
#
月份    北京    上海   
# ======================
一月    2.5    38.1   
二月    5.1    58.4   
三月    10.2   81.3   
四月    25.4   101.6   
五月    27.9   114.3   
六月    71.1   152.4   
七月    175.3  129.5   
八月    182.9  132.1   
九月    48.3   154.9   
十月    17.8   61.0   
十一月  5.1    50.8   
十二月  2.5    35.6   
### 文件结束 ###


我们把修改后的文件称作 "precipitation_v2.dat"。和原文件相比,这里有两处改动:
  1. 原文件中包含城市名称的一行是注释掉的,新文件里这一行表示注释的 # 字符被去掉了;
  2. 原文件中第一列用阿拉伯数字表示的月份,新文件里被换作了中文月份名称。
下面来看新的例子:
gnuplot> plot "precipitation_v2.dat" using 2:xticlabels(1) title columnheader(2), '' using 3:xticlabels(1) title columnheader(3)

这里 using 参数的数据列号后面,增加了一个新的 xticlabels(1),这表示使用第 1 列的内容作为每个数据的 X 轴标注。另外,title 参数后面跟了一个 columnheader(n) 函数,这表示使用第 n 列的第一行内容作为每组数据的 title。这样,我们可以把每组数据的横轴和图例标注预先存入数据文件中,画图时再调用。

除了 clustered 模式,histogram 作图还有 rowstacked 模式,就是把几组数据竖着垒起来:
gnuplot> set style histogram rowstacked
gnuplot> set boxwidth 0.8 relative
gnuplot> set xtics rotate by -45
gnuplot> replot

rowstacked 模式没有 gap 参数,我们这里使用 set boxwidth 命令设置数据柱相对宽度。同时,X 轴标注被旋转了 45 度。这在柱状图里很常见,因为密排的柱状图往往没有足够的空间显示 X 轴标注,旋转之后显示空间便增大了。

既然有 rowstacked,有没有 columnstacked 呢?答案是有的。rowstacked 逐行把数据叠加显示,而 columnstacked 逐列把数据叠加。除此之外,还有 errorbars 模式,在 clustered 基础上增加误差条。由于这两种模式和之前讲过的很类似,所以就不举例了。


http://blog.sciencenet.cn/blog-373392-527507.html

上一篇:谈谈gnuplot(三十六):填充风格
下一篇:谈谈gnuplot(三十八):阶梯图

2 温世正 石锋

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-9-16 16:32

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部