曲线叠加在gnuplot中的曲面上

时间:2014-10-19 17:28:59

标签: 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文件的背景。

1 个答案:

答案 0 :(得分: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 lmarginbmargintmargin和{{1}设置所有边距毫无意义}。另请参阅Big data surface plots: Call gnuplot from tikz to generate bitmap and include automatically?

相关问题