2014-10-19 93 views
1

我正在尝试用gnuplot创建一个曲线叠加到曲面上的绘图。 这是我使用将曲线叠加到gnuplot中的表面

#!/usr/bin/gnuplot 
xwidth=16.2 
set size 1,1 

set terminal epslatex color size xwidth cm,0.59*xwidth font 9 header '\fontsize{10}{13.2} \usepackage[lite,subscriptcorrection,slantedGreek,nofontinfo]{mtpro2}\usepackage{amsmath} \renewcommand{\rmdefault}{ptm}' dashlength 2.0 round standalone 
set output "Pernal12.tex" 
set border 0 lw 0 
set lmargin 0 
set rmargin 0 
set tmargin 0 
set bmargin 0 
set multiplot 

#### 
set size 0.55,1.166 
set origin 0.02,-0.035 

set xrange [0:10] 
set yrange [-6:6] 
set zrange [0:10] 

unset ylabel 
unset xlabel 

set format y '' 
set format x '' 
unset xtics 
unset ytics 
unset label 


set view map 
set isosamples 400, 400 
set style data pm3d 
set style function pm3d 
set pm3d implicit at b 
#set grid noxtics noytics noztics front 
#set palette positive nops_allcF maxcolors 0 gamma 1.5 gray 
set palette defined (0 "white", 10 "black") 

set pm3d interpolate 1,1 
spacing 1.1 
set cbrange[0:10] 
unset colorbox 
t={1,0} 
e0={1,0} 
eta={0.1,0} 
i={0.0,1.0} 
c(x)=sqrt(16*t**2+x**2) 
a(x)=sqrt(2*((4*t/(c(x)-x))**2+1)) 
A(x)=(1-4*t/(c(x)-x))**2 
B(x)=(1+4*t/(c(x)-x))**2 
Gbup(x,y)=1/a(x)**2*(A(x)/(y-(e0+t+(c(x)+x)/2)+x/2+1+i*eta)+B(x)/(y-(e0+t-(c(x)-x)/2)+x /2+1+i*eta)) 
Gaup(x,y)=1/a(x)**2*(B(x)/(y-(e0-t+(c(x)+x)/2)+x/2+1+i*eta)+A(x)/(y-(e0-t-(c(x)-x)/2)+x/2+1+i*eta)) 
splot -imag(Gbup(x,y)+Gaup(x,y))/1.01 notitle 




#### 
unset border 
set border 15 lw 1 
set size 0.385,0.83 

set origin 0.087,0.11 
unset xtics 
unset ytics 

set xrange [0:10] 
set yrange [-6:6] 
set zrange [0:20] 
set xlabel '$U/t$' 
set ylabel '$\omega/t$' offset 1.0,0 
set xtics 5.0 
set mxtics 5 
set label '$n = 1/2$' left at graph 0,1 offset 2.2,-1.6 front 
set xtics ("0" 0,"" 1 1,"" 2 1,"" 3 1,"" 4 1, '5' 5,"" 6 1,"" 7 1,"" 8 1,"" 9 1, '10' 10) 
set ytics ('-6' 6,"" 5 1,"-4" 4,"" 3 1,"-2" 2,"" 1 1, "0" 0,"" -1 1,"2" -2,"" -3 1,"4" -4, "" -5 1, "6" -6) 


set grid noxtics noytics noztics front 
plot 'Pernal12sym.dat' u ($1):(-$8) w l lw 2.5 lc rgb "green"  lt 2 notitle 

q 

我获得好身材的代码,但问题是它的尺寸,超过10 MB。 我可以减小isosamples值,但是表面图分辨率太低。 有没有一种方法可以获得相当高的分辨率,最终的.ps文件的尺寸低于1Mb?

我也试过在PNG表面图年底前,也比使用这个脚本

#!/usr/bin/gnuplot 
xwidth=16.2 
set size 1,1 

set terminal epslatex color size xwidth cm,0.59*xwidth font 9 header '\fontsize{10}{13.2} \usepackage[lite,subscriptcorrection,slantedGreek,nofontinfo]{mtpro2}\usepackage{amsmath} \renewcommand{\rmdefault}{ptm}\usepackage{graphicx}' dashlength 2.0 round standalone 
set output "Pernal12.tex" 
set border 0 lw 0 
set lmargin 0 
set rmargin 0 
set tmargin 0 
set bmargin 0 
set multiplot 

#### 
set size 0.55,1.166 
set origin 0.02,-0.035 

set xrange [0:10] 
set yrange [-6:6] 
set zrange [0:10] 

unset ylabel 
unset xlabel 

set format y '' 
set format x '' 
unset xtics 
unset ytics 
unset label 

plot "Pernal13.png" binary filetype=png w rgbimage 

unset border 
set border 15 lw 1 
set size 0.385,0.83 

set origin 0.087,0.11 
unset xtics 
unset ytics 

set xrange [0:10] 
set yrange [-6:6] 
set zrange [0:20] 
set xlabel '$U/t$' 
set ylabel '$\omega/t$' offset 1.0,0 
set xtics 5.0 
set mxtics 5 

set grid noxtics noytics noztics front 
plot 'Pernal12sym.dat' u ($1):(-$8) w l lw 2.5 lc rgb "green"  lt 2 notitle 
q 

但在救我没有我的PNG图片作为.ps文件的背景。

+0

参见例如我对TeX.SX的回答,[大数据表面图:从tikz调用gnuplot生成位图并自动包含?](http://stackoverflow.com/q/23927580/2604213),以获取有关如何实现此目的的示例。如果你有机会使用5.0rc2(或者试试),你可以使用'level3'选项将'plot ... with image'的数据保存为postscript图像中的png。 – Christoph 2014-10-19 18:29:47

回答

1

对于这种情节(x和y方向上的等距采样),值得使用image绘图风格。由于我没有数据文件来测试整个剧本,这里是使用plot '++' ... with image代替splot ... with pm3d第一部分:

xwidth=16.2 
set terminal epslatex color size xwidth cm,0.59*xwidth font 9 dashlength 2.0 round standalone 
set output "Pernal12.tex" 
unset border 
set lmargin 0 
set rmargin 0 
set tmargin 0 
set bmargin 0 
set multiplot 

#### 
set size 0.55,1.166 
set origin 0.02,-0.035 

set xrange [0:10] 
set yrange [-6:6] 
set zrange [0:10] 

unset tics 

set view map 
set samples 1000 
set isosamples 1000, 1000 
set palette defined (0 "white", 10 "black") 
set cbrange[0:10] 
unset colorbox 

t={1,0} 
e0={1,0} 
eta={0.1,0} 
i={0.0,1.0} 
c(x)=sqrt(16*t**2+x**2) 
a(x)=sqrt(2*((4*t/(c(x)-x))**2+1)) 
A(x)=(1-4*t/(c(x)-x))**2 
B(x)=(1+4*t/(c(x)-x))**2 
Gbup(x,y)=1/a(x)**2*(A(x)/(y-(e0+t+(c(x)+x)/2)+x/2+1+i*eta)+B(x)/(y-(e0+t-(c(x)-x)/2)+x /2+1+i*eta)) 
Gaup(x,y)=1/a(x)**2*(B(x)/(y-(e0-t+(c(x)+x)/2)+x/2+1+i*eta)+A(x)/(y-(e0-t-(c(x)-x)/2)+x/2+1+i*eta)) 
plot '++' using 1:2:(-imag(Gbup($1,$2)+Gaup($1,$2))/1.01) with image notitle 

产生的.ps文件938KB大。如果您使用5.0rc2版本进行更改,则可以使用level3终端选项降低到106kB。

BTW:这是毫无意义的使用set sizeset origin,也请将所有的边距与set lmarginbmargintmarginrmargin。另见Big data surface plots: Call gnuplot from tikz to generate bitmap and include automatically?