代码拉取完成,页面将自动刷新
require 'paths'
local torchstyle = [[
##### Modified version of the sample given in
##### http://www.guidolin.net/blog/files/2010/03/gnuplot
set macro
##### Color Palette by Color Scheme Designer
##### Palette URL: http://colorschemedesigner.com/#3K40zsOsOK-K-
blue_000 = "#A9BDE6" # = rgb(169,189,230)
blue_025 = "#7297E6" # = rgb(114,151,230)
blue_050 = "#1D4599" # = rgb(29,69,153)
blue_075 = "#2F3F60" # = rgb(47,63,96)
blue_100 = "#031A49" # = rgb(3,26,73)
green_000 = "#A6EBB5" # = rgb(166,235,181)
green_025 = "#67EB84" # = rgb(103,235,132)
green_050 = "#11AD34" # = rgb(17,173,52)
green_075 = "#2F6C3D" # = rgb(47,108,61)
green_100 = "#025214" # = rgb(2,82,20)
red_000 = "#F9B7B0" # = rgb(249,183,176)
red_025 = "#F97A6D" # = rgb(249,122,109)
red_050 = "#E62B17" # = rgb(230,43,23)
red_075 = "#8F463F" # = rgb(143,70,63)
red_100 = "#6D0D03" # = rgb(109,13,3)
brown_000 = "#F9E0B0" # = rgb(249,224,176)
brown_025 = "#F9C96D" # = rgb(249,201,109)
brown_050 = "#E69F17" # = rgb(230,159,23)
brown_075 = "#8F743F" # = rgb(143,116,63)
brown_100 = "#6D4903" # = rgb(109,73,3)
grid_color = "#d5e0c9"
text_color = "#222222"
my_font = "SVBasic Manual, 12"
my_export_sz = "1024,768"
my_line_width = "2"
my_axis_width = "1"
my_ps = "1"
my_font_size = "14"
# must convert font fo svg and ps
# set term svg size @my_export_sz fname my_font fsize my_font_size enhanced dynamic rounded
# set term png size @my_export_sz large font my_font
# set term jpeg size @my_export_sz large font my_font
# set term wxt enhanced font my_font
set style data linespoints
set style function lines
set pointsize my_ps
set style line 1 linecolor rgbcolor blue_050 linewidth @my_line_width pt 7
set style line 2 linecolor rgbcolor green_050 linewidth @my_line_width pt 7
set style line 3 linecolor rgbcolor red_050 linewidth @my_line_width pt 7
set style line 4 linecolor rgbcolor brown_050 linewidth @my_line_width pt 7
set style line 5 linecolor rgbcolor blue_025 linewidth @my_line_width pt 5
set style line 6 linecolor rgbcolor green_025 linewidth @my_line_width pt 5
set style line 7 linecolor rgbcolor red_025 linewidth @my_line_width pt 5
set style line 8 linecolor rgbcolor brown_025 linewidth @my_line_width pt 5
set style line 9 linecolor rgbcolor blue_075 linewidth @my_line_width pt 9
set style line 10 linecolor rgbcolor green_075 linewidth @my_line_width pt 9
set style line 11 linecolor rgbcolor red_075 linewidth @my_line_width pt 9
set style line 12 linecolor rgbcolor brown_075 linewidth @my_line_width pt 9
set style line 13 linecolor rgbcolor blue_100 linewidth @my_line_width pt 13
set style line 14 linecolor rgbcolor green_100 linewidth @my_line_width pt 13
set style line 15 linecolor rgbcolor red_100 linewidth @my_line_width pt 13
set style line 16 linecolor rgbcolor brown_100 linewidth @my_line_width pt 13
set style line 17 linecolor rgbcolor "#224499" linewidth @my_line_width pt 11
## plot 1,2,3,4,5,6,7,8,9
set style increment user
set style arrow 1 filled
## used for bar chart borders
## set style fill solid 0.5
set size noratio
set samples 300
set border 31 lw @my_axis_width lc rgb text_color
]]
local _gptable = {}
_gptable.current = nil
_gptable.defaultterm = nil
_gptable.exe = nil
_gptable.hasrefresh = true
local function getexec()
if not _gptable.exe then
error('gnuplot executable is not set')
end
return _gptable.exe
end
local function findos()
local s = paths.uname()
if s and s:match("Windows") then
return 'windows'
elseif s and s:match('Darwin') then
return 'mac'
elseif s and s:match('Linux') then
return 'linux'
elseif s and s:match('FreeBSD') then
return 'freebsd'
else
return '?'
end
end
local function getfigure(n)
local n = n
if not n or n == nil then
n = #_gptable+1
end
if _gptable[n] == nil then
_gptable[n] = {}
if _gptable.defaultterm == nil then
error('Gnuplot terminal is not set')
end
local silent = '> /dev/null 2>&1'
if paths.is_win() then
silent = '> nul 2>&1'
end
_gptable[n].term = _gptable.defaultterm
_gptable[n].pipe = torch.PipeFile(getexec() .. ' -persist ' .. silent,'w')
end
_gptable.current = n
if not paths.filep(paths.concat(paths.home,'.gnuplot')) then
_gptable[n].pipe:writeString(torchstyle .. '\n\n\n')
_gptable[n].pipe:synchronize()
end
return _gptable[n]
end
local function gnuplothasterm(term)
if not _gptable.exe then
return false--error('gnuplot exe is not found, can not chcek terminal')
end
local tfni = os.tmpname()
local tfno = os.tmpname()
local fi = io.open(tfni,'w')
fi:write('set terminal\n\n')
fi:close()
os.execute(getexec() .. ' < ' .. tfni .. ' > ' .. tfno .. ' 2>&1 ')
os.remove(tfni)
local tf = io.open(tfno,'r')
local s = tf:read('*l')
while s do
if s:match('^.*%s+ '.. term .. ' ') then
tf:close()
os.remove(tfno)
return true
end
s = tf:read('*l')
end
tf:close()
os.remove(tfno)
return false
end
local function findgnuplotversion(exe)
local ff = io.popen(exe .. ' --version','r')
local ss = ff:read('*l')
ff:close()
local v,vv = ss:match('(%d).(%d)')
v=tonumber(v)
vv=tonumber(vv)
return v,vv
end
local function findgnuplotexe()
local o = findos()
local s = paths.findprogram('gnuplot')
if type(s) == 'string' and s:match(' ') then
s = '"' .. s .. '"'
end
_gptable.hasrefresh = true
do -- preserve indentation to minimize merging issues
if s and s:len() > 0 and s:match('gnuplot') then
local v,vv = findgnuplotversion(s)
if v < 4 then
error('gnuplot version 4 is required')
end
if v == 4 and vv < 4 then
-- try to find gnuplot44
if o == 'linux' and paths.filep('/usr/bin/gnuplot44') then
local ss = '/usr/bin/gnuplot44'
v,vv = findgnuplotversion(ss)
if v == 4 and vv == 4 then
return ss
end
end
_gptable.hasrefresh = false
print('Gnuplot package working with reduced functionality.')
print('Please install gnuplot version >= 4.4.')
end
return s
else
return nil
end
end
end
local function getgnuplotdefaultterm(os)
if os == 'windows' then
return 'windows'
elseif os == 'linux' and gnuplothasterm('wxt') then
return 'wxt'
elseif os == 'linux' and gnuplothasterm('qt') then
return 'qt'
elseif os == 'linux' and gnuplothasterm('x11') then
return 'x11'
elseif os == 'freebsd' and gnuplothasterm('wxt') then
return 'wxt'
elseif os == 'freebsd' and gnuplothasterm('qt') then
return 'qt'
elseif os == 'freebsd' and gnuplothasterm('x11') then
return 'x11'
elseif os == 'mac' and gnuplothasterm('aqua') then
return 'aqua'
elseif os == 'mac' and gnuplothasterm('wxt') then
return 'wxt'
elseif os == 'mac' and gnuplothasterm('qt') then
return 'qt'
elseif os == 'mac' and gnuplothasterm('x11') then
return 'x11'
else
print('Can not find any of the default terminals for ' .. os .. '. ' ..
'You can manually set terminal by gnuplot.setterm("terminal-name")')
return nil
end
end
local function findgnuplot()
local exe = findgnuplotexe()
local os = findos()
if not exe then
return nil
end
_gptable.exe = exe
_gptable.defaultterm = getgnuplotdefaultterm(os)
end
function gnuplot.setgnuplotexe(exe)
local oldexe = _gptable.exe
if not paths.filep(exe) then
error(exe .. ' does not exist')
end
_gptable.exe = exe
local v,vv = findgnuplotversion(exe)
if v < 4 then error('gnuplot version 4 is required') end
if v == 4 and vv < 4 then
_gptable.hasrefresh = false
print('Some functionality like adding title, labels, ... will be disabled, it is better to install gnuplot version 4.4')
else
_gptable.hasrefresh = true
end
local os = findos()
local term = getgnuplotdefaultterm(os)
if term == nil then
print('You have manually set the gnuplot exe and I can not find default terminals, run gnuplot.setterm("terminal-name") to set term type')
end
end
function gnuplot.setterm(term)
if gnuplothasterm(term) then
_gptable.defaultterm = term
else
error('gnuplot does not seem to have this term')
end
end
local function getCurrentPlot()
if _gptable.current == nil then
gnuplot.figure()
end
return _gptable[_gptable.current]
end
local function writeToPlot(gp,str)
local pipe = gp.pipe
pipe:writeString(str .. '\n\n\n')
pipe:synchronize()
end
local function refreshPlot(gp)
if gp.fname then
writeToPlot(gp,'set output "' .. gp.fname .. '"')
end
writeToPlot(gp,'refresh')
if gp.fname then
writeToPlot(gp,'unset output')
end
end
local function writeToCurrent(str)
writeToPlot(getCurrentPlot(),str)
end
local function refreshCurrent()
refreshPlot(getCurrentPlot())
end
-- t is the arguments for one plot at a time
local function getvars(t)
local legend = nil
local x = nil
local y = nil
local format = nil
local function istensor(v)
return type(v) == 'userdata' and torch.typename(v):sub(-6) == 'Tensor'
end
local function isstring(v)
return type(v) == 'string'
end
if #t == 0 then
error('empty argument list')
end
if #t >= 1 then
if isstring(t[1]) then
legend = t[1]
elseif istensor(t[1]) then
x = t[1]
else
error('expecting [string,] tensor [,tensor] [,string]')
end
end
if #t >= 2 then
if x and isstring(t[2]) then
format = t[2]
elseif x and istensor(t[2]) then
y = t[2]
elseif legend and istensor(t[2]) then
x = t[2]
else
error('expecting [string,] tensor [,tensor] [,string]')
end
end
if #t >= 3 then
if legend and x and istensor(t[3]) then
y = t[3]
elseif legend and x and isstring(t[3]) then
format = t[3]
elseif x and y and isstring(t[3]) then
format = t[3]
else
error('expecting [string,] tensor [,tensor] [,string]')
end
end
if #t == 4 then
if legend and x and y and isstring(t[4]) then
format = t[4]
else
error('expecting [string,] tensor [,tensor] [,string]')
end
end
legend = legend or ''
format = format or ''
if not x then
error('expecting [string,] tensor [,tensor] [,string]')
end
if not y then
if x:dim() == 2 and x:size(2) == 2 then
y = x:select(2,2)
x = x:select(2,1)
elseif x:dim() == 2 and x:size(2) == 4 and format == 'v' then
y = torch.Tensor(x:size(1),2)
xx= torch.Tensor(x:size(1),2)
y:select(2,1):copy(x:select(2,2))
y:select(2,2):copy(x:select(2,4))
xx:select(2,1):copy(x:select(2,1))
xx:select(2,2):copy(x:select(2,3))
x = xx
elseif x:dim() == 2 and x:size(2) > 1 then
y = x[{ {}, {2,-1} }]
x = x:select(2,1)
else
y = x
x = torch.range(1,y:size(1))
end
end
if x:dim() ~= 1 and x:dim() ~= 2 then
error('x and y dims are wrong : x = ' .. x:nDimension() .. 'D y = ' .. y:nDimension() .. 'D')
end
if y:size(1) ~= x:size(1) then
error('x and y dims are wrong : x = ' .. x:nDimension() .. 'D y = ' .. y:nDimension() .. 'D')
end
-- if x:dim() ~= y:dim() or x:nDimension() > 2 or y:nDimension() > 2 then
-- error('x and y dims are wrong : x = ' .. x:nDimension() .. 'D y = ' .. y:nDimension() .. 'D')
-- end
-- print(x:size(),y:size())
return legend,x,y,format
end
-- t is the arguments for one plot at a time
local function getsplotvars(t)
local legend = nil
local x = nil
local y = nil
local z = nil
local function istensor(v)
return type(v) == 'userdata' and torch.typename(v):sub(-6) == 'Tensor'
end
local function isstring(v)
return type(v) == 'string'
end
if #t == 0 then
error('empty argument list')
end
if #t >= 1 then
if isstring(t[1]) then
legend = t[1]
elseif istensor(t[1]) then
x = t[1]
else
error('expecting [string,] tensor [,tensor] [,tensor]')
end
end
if #t >= 2 and #t <= 4 then
if x and istensor(t[2]) and istensor(t[3]) then
y = t[2]
z = t[3]
elseif legend and istensor(t[2]) and istensor(t[3]) and istensor(t[4]) then
x = t[2]
y = t[3]
z = t[4]
elseif legend and istensor(t[2]) then
x = t[2]
else
error('expecting [string,] tensor [,tensor] [,tensor]')
end
elseif #t > 4 then
error('expecting [string,] tensor [,tensor] [,tensor]')
end
legend = legend or ''
if not x then
error('expecting [string,] tensor [,tensor] [,tensor]')
end
if not z then
z = x
x = torch.Tensor(z:size())
y = torch.Tensor(z:size())
for i=1,x:size(1) do x:select(1,i):fill(i) end
for i=1,y:size(2) do y:select(2,i):fill(i) end
end
if x:nDimension() ~= 2 or y:nDimension() ~= 2 or z:nDimension() ~= 2 then
error('x and y and z are expected to be matrices x = ' .. x:nDimension() .. 'D y = ' .. y:nDimension() .. 'D z = '.. z:nDimension() .. 'D' )
end
return legend,x,y,z
end
local function getscatter3vars(t)
local legend = nil
local x = nil
local y = nil
local z = nil
local function istensor(v)
return type(v) == 'userdata' and torch.typename(v):sub(-6) == 'Tensor'
end
local function isstring(v)
return type(v) == 'string'
end
if #t ~= 3 and #t ~= 4 then
error('expecting [string,] tensor, tensor, tensor')
end
if isstring(t[1]) then
if #t ~= 4 then
error('expecting [string,] tensor, tensor, tensor')
end
for i = 2, 4 do
if not istensor(t[i]) then
error('expecting [string,] tensor, tensor, tensor')
end
end
legend = t[1]
x = t[2]
y = t[3]
z = t[4]
elseif istensor(t[1]) then
if #t ~= 3 then
error('expecting [string,] tensor, tensor, tensor')
end
for i = 2, 3 do
if not istensor(t[i]) then
error('expecting [string,] tensor, tensor, tensor')
end
end
x = t[1]
y = t[2]
z = t[3]
legend = ''
else
error('expecting [string,] tensor, tensor, tensor')
end
assert(x:dim() == 1 and y:dim() == 1 and z:dim() == 1,
'x, y and z must be 1D')
assert(x:isSameSizeAs(y) and x:isSameSizeAs(z),
'x, y and z must be the same size')
return legend, x, y, z
end
local function getimagescvars(t)
local palette = nil
local x = nil
local function istensor(v)
return type(v) == 'userdata' and torch.typename(v):sub(-6) == 'Tensor'
end
local function isstring(v)
return type(v) == 'string'
end
if #t == 0 then
error('empty argument list')
end
if #t >= 1 then
if istensor(t[1]) then
x = t[1]
else
error('expecting tensor [,string]')
end
end
if #t == 2 then
if x and isstring(t[2]) then
palette = t[2]
else
error('expecting tensor [,string]' )
end
elseif #t > 2 then
error('expecting tensor [,string]')
end
legend = legend or ''
if not x then
error('expecting tensor [,string]')
end
if not palette then
palette = 'gray'
end
if x:nDimension() ~= 2 then
error('x is expected to be matrices x = ' .. x:nDimension() .. 'D')
end
return x,palette
end
local function gnuplot_string(legend,x,y,format)
local hstr = 'plot '
local dstr = {''}
local coef = {}
local vecplot = {}
local function gformat(f,i)
if f ~= '~' and f:find('~') or f:find('acsplines') then
coef[i] = f:gsub('~',''):gsub('acsplines','')
coef[i] = tonumber(coef[i])
f = 'acsplines'
end
if f == '' or f == '' then return ''
elseif f == '+' or f == 'points' then return 'with points'
elseif f == '.' or f == 'dots' then return 'with dots'
elseif f == '-' or f == 'lines' then return 'with lines'
elseif f == '+-' or f == 'linespoints' then return 'with linespoints'
elseif f == '|' or f == 'boxes' then return 'with boxes'
elseif f == '~' or f == 'csplines' then return 'smooth csplines'
elseif f == 'acsplines' then return 'smooth acsplines'
elseif f == 'V' or f == 'v' or f == 'vectors' then vecplot[i]=true;return 'with vectors'
else return f
end
end
for i=1,#legend do
if i > 1 then hstr = hstr .. ' , ' end
hstr = hstr .. " '-' title '" .. legend[i] .. "' " .. gformat(format[i],i)
end
hstr = hstr .. '\n'
for i=1,#legend do
local xi = x[i]
local yi = y[i]
for j=1,xi:size(1) do
if coef[i] then
--print(i,coef)
table.insert(dstr,string.format('%g %g %g\n',xi[j],yi[j],coef[i]))
elseif vecplot[i] then
--print(xi,yi)
table.insert(dstr,string.format('%g %g %g %g\n',xi[j][1],yi[j][1],xi[j][2],yi[j][2]))
elseif yi:dim() == 1 then
table.insert(dstr,string.format('%g %g\n',xi[j],yi[j]))
else
table.insert(dstr,string.format(string.rep('%g ',1+yi:size(2)) .. '\n',xi[j],unpack(yi[j]:clone():storage():totable())))
end
end
collectgarbage()
table.insert(dstr,'e\n')
end
return hstr,table.concat(dstr)
end
local function gnu_splot_string(legend,x,y,z)
local hstr = string.format('%s\n','set contour base')
hstr = string.format('%s%s\n',hstr,'set cntrparam bspline\n')
hstr = string.format('%s%s\n',hstr,'set cntrparam levels auto\n')
hstr = string.format('%s%s\n',hstr,'set style data lines\n')
hstr = string.format('%s%s\n',hstr,'set hidden3d\n')
hstr = hstr .. 'splot '
local dstr = {''}
local coef
for i=1,#legend do
if i > 1 then hstr = hstr .. ' , ' end
hstr = hstr .. " '-'title '" .. legend[i] .. "' " .. 'with lines'
end
hstr = hstr .. '\n'
for i=1,#legend do
local xi = x[i]
local yi = y[i]
local zi = z[i]
for j=1,xi:size(1) do
local xij = xi[j]
local yij = yi[j]
local zij = zi[j]
for k=1,xi:size(2) do
table.insert(dstr, string.format('%g %g %g\n',xij[k],yij[k],zij[k]))
end
table.insert(dstr,'\n')
end
table.insert(dstr,'e\n')
end
return hstr,table.concat(dstr)
end
local function gnu_scatter3_string(legend, x, y, z)
local hstr = string.format('%s\n','set contour base')
hstr = string.format('%s%s\n',hstr,'set style data points\n')
hstr = string.format('%s%s\n',hstr,'set hidden3d\n')
hstr = hstr .. 'splot '
local dstr = {''}
local coef
for i = 1, #legend do
if i > 1 then hstr = hstr .. ' , ' end
hstr = hstr .. " '-'title '" .. legend[i] .. "' " .. 'with points'
end
hstr = hstr .. '\n'
for i = 1, #legend do
local xi = x[i]
local yi = y[i]
local zi = z[i]
for j = 1, xi:size(1) do
local xij = xi[j]
local yij = yi[j]
local zij = zi[j]
table.insert(dstr,
string.format('%g %g %g\n', xij, yij, zij))
end
table.insert(dstr, 'e\n')
end
return hstr, table.concat(dstr)
end
local function gnu_imagesc_string(x,palette)
local hstr = string.format('%s\n','set view map')
hstr = string.format('%s%s %s\n',hstr,'set palette',palette)
hstr = string.format('%s%s\n',hstr,'set style data linespoints')
hstr = string.format('%s%s%g%s\n',hstr,"set xrange [ -0.5 : ",x:size(2)-0.5,"] noreverse nowriteback")
hstr = string.format('%s%s%g%s\n',hstr,"set yrange [ -0.5 : ",x:size(1)-0.5,"] reverse nowriteback")
hstr = string.format('%s%s\n',hstr,"splot '-' matrix with image")
local dstr = {''}
for i=1,x:size(1) do
local xi = x[i];
for j=1,x:size(2) do
table.insert(dstr,string.format('%g ',xi[j]))
end
table.insert(dstr, string.format('\n'))
end
table.insert(dstr,string.format('e\ne\n'))
return hstr,table.concat(dstr)
end
function gnuplot.close(n)
if not n then
n = _gptable.current
end
local gp = _gptable[n]
if gp == nil then return end
if type(n) == 'number' and torch.typename(gp.pipe) == 'torch.PipeFile' then
_gptable.current = nil
gnuplot.plotflush(n)
writeToPlot(gp, 'quit')
-- pipefile:close is buggy in TH
--gp.pipe:close()
gp.pipe=nil
gp = nil
_gptable[n] = nil
end
collectgarbage()
end
function gnuplot.closeall()
for i,v in pairs(_gptable) do
gnuplot.close(i)
end
_gptable = {}
collectgarbage()
findgnuplot()
_gptable.current = nil
end
local function filefigure(fname,term,n)
if not _gptable.hasrefresh then
print('Plotting to files is disabled in gnuplot 4.2, install gnuplot 4.4')
end
-- Check whether the output directory can be written to here - torch.PipeFile
-- has no read/write option so we can't read back any error messages from
-- gnuplot, and writing to 'non_existent_dir/plot.png' fails silently.
local outputDir = paths.dirname(fname)
if outputDir == '' then
outputDir = '.'
end
if not paths.dirp(outputDir) then
error('cannot save to ' .. fname .. ': directory does not exist')
end
local gp = getfigure(n)
gp.fname = fname
gp.term = term
writeToCurrent('set term '.. gp.term)
--writeToCurrent('set output \'' .. gp.fname .. '\'')
end
function gnuplot.epsfigure(fname,n)
filefigure(fname,'postscript eps enhanced color',n)
return _gptable.current
end
function gnuplot.svgfigure(fname,n)
filefigure(fname,'svg',n)
return _gptable.current
end
function gnuplot.pngfigure(fname,n)
local term = gnuplothasterm('pngcairo') and 'pngcairo' or 'png'
filefigure(fname,term,n)
return _gptable.current
end
function gnuplot.pdffigure(fname,n)
local haspdf = gnuplothasterm('pdf') or gnuplothasterm('pdfcairo')
if not haspdf then
error('your installation of gnuplot does not have pdf support enabled')
end
local term = nil
if gnuplothasterm('pdfcairo') then
term = 'pdfcairo enhanced color'
else
term = 'pdf enhanced color'
end
filefigure(fname,term,n)
return _gptable.current
end
function gnuplot.figprint(fname)
local suffix = fname:match('.+%.(.+)')
local term = nil
local haspdf = gnuplothasterm('pdf') or gnuplothasterm('pdfcairo')
if suffix == 'eps' then
term = 'postscript eps enhanced color'
elseif suffix == 'png' then
term = gnuplothasterm('pngcairo') and 'pngcairo' or 'png'
term = term .. ' size "1024,768"'
elseif suffix == 'pdf' and haspdf then
if not haspdf then
error('your installation of gnuplot does not have pdf support enabled')
end
if gnuplothasterm('pdfcairo') then
term = 'pdfcairo'
else
term = 'pdf'
end
term = term .. ' enhanced color'
else
local errmsg = 'only eps and png'
if haspdf then
errmsg = errmsg .. ' and pdf'
end
error(errmsg ' for figprint')
end
writeToCurrent('set term ' .. term)
writeToCurrent('set output \''.. fname .. '\'')
refreshCurrent()
writeToCurrent('unset output')
writeToCurrent('set term ' .. _gptable[_gptable.current].term .. ' ' .. _gptable.current .. '\n')
end
function gnuplot.figure(n, config)
config = config or {}
local gp = getfigure(n)
writeToCurrent('set term ' .. _gptable[_gptable.current].term .. ' ' .. _gptable.current .. '\n')
if not config.noraise then
writeToCurrent('raise')
end
return _gptable.current
end
function gnuplot.plotflush(n)
if not n then
n = _gptable.current
end
if not n or _gptable[n] == nil then
print('no figure ' .. tostring(n))
return
end
local gp = _gptable[n]
--xprint(gp)
refreshPlot(gp)
-- if gp.fname then
-- writeToPlot(gp,'set output "' .. gp.fname .. '"')
-- writeToPlot(gp,'refresh')
-- writeToPlot(gp,'unset output')
-- end
end
local function gnulplot(legend,x,y,format)
local hdr,data = gnuplot_string(legend,x,y,format)
writeToCurrent(hdr)
writeToCurrent(data)
end
local function gnusplot(legend,x,y,z)
local hdr,data = gnu_splot_string(legend,x,y,z)
writeToCurrent(hdr)
writeToCurrent(data)
end
local function gnuscatter3(legend, x, y, z)
local hdr, data = gnu_scatter3_string(legend, x, y, z)
writeToCurrent(hdr)
writeToCurrent(data)
end
local function gnuimagesc(x,palette)
local hdr,data = gnu_imagesc_string(x,palette)
writeToCurrent(hdr)
writeToCurrent(data)
end
function gnuplot.xlabel(label)
if not _gptable.hasrefresh then
print('gnuplot.xlabel disabled')
return
end
writeToCurrent('set xlabel "' .. label .. '"')
refreshCurrent()
end
function gnuplot.ylabel(label)
if not _gptable.hasrefresh then
print('gnuplot.ylabel disabled')
return
end
writeToCurrent('set ylabel "' .. label .. '"')
refreshCurrent()
end
function gnuplot.zlabel(label)
if not _gptable.hasrefresh then
print('gnuplot.zlabel disabled')
return
end
writeToCurrent('set zlabel "' .. label .. '"')
refreshCurrent()
end
function gnuplot.title(label)
if not _gptable.hasrefresh then
print('gnuplot.title disabled')
return
end
writeToCurrent('set title "' .. label .. '"')
refreshCurrent()
end
function gnuplot.grid(toggle)
if not _gptable.hasrefresh then
print('gnuplot.grid disabled')
return
end
if toggle then
writeToCurrent('set grid')
refreshCurrent()
else
writeToCurrent('unset grid')
refreshCurrent()
end
end
function gnuplot.logscale(toggle)
if not _gptable.hasrefresh then
print('gnuplot.logscale disabled')
return
end
if toggle then
writeToCurrent('set logscale y')
refreshCurrent()
else
writeToCurrent('unset logscale y')
refreshCurrent()
end
end
function gnuplot.movelegend(hloc,vloc)
if not _gptable.hasrefresh then
print('gnuplot.movelegend disabled')
return
end
if hloc ~= 'left' and hloc ~= 'right' and hloc ~= 'center' then
error('horizontal location is unknown : plot.movelegend expects 2 strings as location {left|right|center}{bottom|top|middle}')
end
if vloc ~= 'bottom' and vloc ~= 'top' and vloc ~= 'middle' then
error('horizontal location is unknown : plot.movelegend expects 2 strings as location {left|right|center}{bottom|top|middle}')
end
writeToCurrent('set key ' .. hloc .. ' ' .. vloc)
refreshCurrent()
end
function gnuplot.axis(axis)
if not _gptable.hasrefresh then
print('gnuplot.axis disabled')
return
end
if axis == 'auto' then
writeToCurrent('set size nosquare')
writeToCurrent('set autoscale')
refreshCurrent()
elseif axis == 'image' or axis == 'equal' then
writeToCurrent('set size ratio -1')
refreshCurrent()
elseif axis == 'fill' then
writeToCurrent('set size ratio 1,1')
refreshCurrent()
elseif type(axis) == 'table' then
if #axis ~= 4 then print('axis should have 4 componets {xmin,xmax,ymin,ymax}'); return end
writeToCurrent('set xrange [' .. axis[1] .. ':' .. axis[2] .. ']')
writeToCurrent('set yrange [' .. axis[3] .. ':' .. axis[4] .. ']')
refreshCurrent()
end
end
function gnuplot.raw(str)
writeToCurrent(str)
end
-- plot(x)
-- plot(x,'.'), plot(x,'.-')
-- plot(x,y,'.'), plot(x,y,'.-')
-- plot({x1,y1,'.'},{x2,y2,'.-'})
-- plot({{x1,y1,'.'},{x2,y2,'.-'}})
function gnuplot.plot(...)
local arg = {...}
if select('#',...) == 0 then
error('no inputs, expecting at least a vector')
end
local formats = {}
local xdata = {}
local ydata = {}
local legends = {}
if type(arg[1]) == "table" then
if type(arg[1][1]) == "table" then
arg = arg[1]
end
for i,v in ipairs(arg) do
local l,x,y,f = getvars(v)
legends[#legends+1] = l
formats[#formats+1] = f
xdata[#xdata+1] = x
ydata[#ydata+1] = y
end
else
local l,x,y,f = getvars(arg)
legends[#legends+1] = l
formats[#formats+1] = f
xdata[#xdata+1] = x
ydata[#ydata+1] = y
end
gnulplot(legends,xdata,ydata,formats)
end
-- splot(z)
-- splot({x1,y1,z1},{x2,y2,z2})
-- splot({'name1',x1,y1,z1},{'name2',x2,y2,z2})
function gnuplot.splot(...)
local arg = {...}
if select('#',...) == 0 then
error('no inputs, expecting at least a matrix')
end
local xdata = {}
local ydata = {}
local zdata = {}
local legends = {}
if type(arg[1]) == "table" then
if type(arg[1][1]) == "table" then
arg = arg[1]
end
for i,v in ipairs(arg) do
local l,x,y,z = getsplotvars(v)
legends[#legends+1] = l
xdata[#xdata+1] = x
ydata[#ydata+1] = y
zdata[#zdata+1] = z
end
else
local l,x,y,z = getsplotvars(arg)
legends[#legends+1] = l
xdata[#xdata+1] = x
ydata[#ydata+1] = y
zdata[#zdata+1] = z
end
gnusplot(legends,xdata,ydata,zdata)
end
-- scatter3(x, y, z)
-- scatter3({x1, y1, z1}, {x2, y2, z2})
-- scatter3({'name1', x1, y1, z1}, {'name2', x2, y2, z2})
function gnuplot.scatter3(...)
local arg = {...}
if select('#', ...) == 0 then
error('no inputs, expecting at least a matrix')
end
local xdata = {}
local ydata = {}
local zdata = {}
local legends = {}
if type(arg[1]) == "table" then
if type(arg[1][1]) == "table" then
arg = arg[1]
end
for i,v in ipairs(arg) do
local l, x, y, z = getscatter3vars(v)
legends[#legends + 1] = l
xdata[#xdata + 1] = x
ydata[#ydata + 1] = y
zdata[#zdata + 1] = z
end
else
local l, x, y, z = getscatter3vars(arg)
legends[#legends + 1] = l
xdata[#xdata + 1] = x
ydata[#ydata + 1] = y
zdata[#zdata + 1] = z
end
gnuscatter3(legends, xdata, ydata, zdata)
end
-- imagesc(x) -- x 2D tensor [0 .. 1]
function gnuplot.imagesc(...)
local arg = {...}
if select('#',...) == 0 then
error('no inputs, expecting at least a matrix')
end
gnuimagesc(getimagescvars(arg))
end
-- bar(y)
-- bar(x,y)
function gnuplot.bar(...)
local arg = {...}
local nargs = {}
for i = 1,select('#',...) do
table.insert(nargs,arg[i])
end
table.insert(nargs, '|')
gnuplot.plot(nargs)
end
-- complete function: compute hist and display it
function gnuplot.hist(tensor,bins,min,max)
local h = gnuplot.histc(tensor,bins,min,max)
local x_axis = torch.Tensor(#h)
for i = 1,#h do
x_axis[i] = h[i].val
end
gnuplot.bar(x_axis, h.raw)
return h
end
findgnuplot()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。