Gnuplot: 如何给柱状图添加颜色背景和图案填充

8

我希望在Gnuplot中实现同时填充颜色和图案的条形图,是否可能?

我使用的是Gnuplot 4.6.5版本。

目前我的代码如下:

# set terminal pngcairo  transparent enhanced font "arial,10" fontscale 1.0 size 500, 350 
# set output 'histograms.2.png'
set boxwidth 0.9 absolute
set style fill   solid 1.00 border lt -1
set key inside right top vertical Right noreverse noenhanced autotitles nobox
set style histogram clustered gap 1 title  offset character 0, 0, 0
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror rotate by -45  offset character 0, 0, 0 autojustify
set xtics  norangelimit font ",8"
set xtics   ()
set title "US immigration from Northern Europe\nPlot selected data columns as histogram of clustered boxes" 
i = 22
set yrange [0:2000]
set style line 1 lc rgb 'orange';
set style line 2 lc rgb 'pink';
plot for [i=2:7] 'data.dat' using i:xtic(1) ti col ls i%2+1;

数据文件:
Region  Denmark France Demark-Women France-women Demark-man France-men
1891-1900   1000 1100   500 600 500 500
1901-1910   1500 1600   1000 600 500 1000

以下是脚本和数据文件的下载链接:https://dl.dropboxusercontent.com/u/45318932/histograms2.plthttps://dl.dropboxusercontent.com/u/45318932/data.dat 该脚本给出了如下的输出结果:

enter image description here

而我需要的结果如下:

enter image description here

如果有人可以帮我改进代码以生成第二个图,我将不胜感激。谢谢。
1个回答

13

这个非常棘手,因为你不能改变填充图案的背景颜色。而默认情况下,图案的背景颜色是白色,而不是透明或空的。

唯一可以适当操纵的终端是lua tikz终端。在这里,我先画出所有的彩色框,然后在第二次迭代中绘制填充图案。要进行新的迭代,我使用newhistogram选项,但这会在图例中留下间隙。

为了去除填充图案的白色背景,我使用sed从输出流中删除相关部分。相当hacky,但它能正常工作:

set terminal lua tikz standalone size 5in, 3in color
set output '| sed ''s/\\gpfill{color=gpbgfillcolor}//g'' > histograms.tex'
set boxwidth 0.9 absolute
set style fill   solid 1.00 border lt -1
set key inside right top vertical Right noreverse noenhanced autotitles nobox
set style histogram clustered gap 1 title  offset character 0, 0, 0
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror rotate by -45  offset character 0, 0, 0 autojustify
set xtics  norangelimit font ",8"
set xtics   ()
set title "US immigration from Northern Europe\nPlot selected data columns as histogram of clustered boxes" 
i = 22
set yrange [0:2000]
set xrange [-1:2]
set style line 1 lc rgb 'orange';
set style line 2 lc rgb 'pink';
plot for [i=2:7] 'data.dat' using i:xtic(1) ti columnhead(i > 3 ? 10 : i) ls i%2+1 fillstyle solid noborder,\
     newhistogram at -1, \
     '' using 2 ti 'total' lt -1 fillstyle empty,\
     '' using 3 notitle lt -1 fillstyle empty,\
     '' using 4 title 'women' lt -1 fillstyle pattern 5,\
     '' using 5 notitle lt -1 fillstyle pattern 5,\
     '' using 6 title 'men' lt -1 fillstyle pattern 6,\
     '' using 7 notitle lt -1 fillstyle pattern 6

set output
system('pdflatex histograms.tex')

4.6.5版本的结果:

图片描述

刚刚发现,您可以指定无背景颜色的图案,例如

... fillstyle pattern 6 transparent

适用于哪些终端取决于gnuplot的版本:

plot x with filledcurves x1 fillstyle solid fc rgb '#990000',\
     x with filledcurves x1 fillstyle pattern 4 transparent lc rgb 'white'

结果(带有SVG终端和版本4.6.5):

输入图像描述


真的希望 Gnuplot 未来版本能考虑添加这个功能。 - Changwang Zhang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接