├── spec ├── tmp │ └── .keep ├── support │ └── models │ │ └── random_generator.rb ├── integration │ ├── sinwave_spec.rb │ ├── arrtest_spec.rb │ ├── histtest_spec.rb │ └── multtest_spec.rb ├── lib │ └── ruby_gnuplot │ │ ├── plot │ │ └── style_spec.rb │ │ ├── data_set_spec.rb │ │ └── plot_spec.rb ├── spec_helper.rb └── fixtures │ └── plots │ ├── array_plot.eps │ ├── multtest_plot.eps │ ├── sin_wave_plot.eps │ └── histogram_plot.eps ├── examples ├── .gitignore ├── 3d_surface_plot.rb ├── sin_wave.rb ├── discrete_points.rb ├── multiple_data_sets.rb ├── output_image_file.rb └── histogram.rb ├── .rspec ├── .gitignore ├── lib ├── ruby_gnuplot │ └── version.rb └── gnuplot.rb ├── AUTHORS.txt ├── Gemfile ├── docker-compose.yml ├── .rubocop.yml ├── Dockerfile ├── test ├── sinwave.rb ├── arrtest.rb ├── histtest.rb ├── multtest.rb └── test_gnuplot.rb ├── Rakefile ├── ruby_gnuplot.gemspec ├── LICENSE.txt ├── ChangeLog ├── README.textile └── .rubocop_todo.yml /spec/tmp/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | sin_wave.gif -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --require spec_helper 2 | --color 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Gemfile.lock 2 | **/*.swp 3 | coverage/ 4 | -------------------------------------------------------------------------------- /lib/ruby_gnuplot/version.rb: -------------------------------------------------------------------------------- 1 | module RubyGnuplot 2 | VERSION = "2.6.1" 3 | end 4 | -------------------------------------------------------------------------------- /AUTHORS.txt: -------------------------------------------------------------------------------- 1 | Gordon James Miller 2 | Ara T. Howard 3 | Roger Pack 4 | Mike Cahill 5 | jakobs 6 | blambeau -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in ruby_gnuplot.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | ruby_gnuplot: 4 | build: . 5 | working_dir: /home/gnuplot/gnuplot 6 | container_name: ruby_gnuplot 7 | command: /bin/bash 8 | volumes: 9 | - .:/home/gnuplot/gnuplot 10 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | require: rubocop-rspec 2 | inherit_from: .rubocop_todo.yml 3 | 4 | AllCops: 5 | TargetRubyVersion: 2.5 6 | 7 | RSpec/DescribeClass: 8 | Exclude: 9 | - 'spec/**/*_spec.rb' 10 | 11 | Metrics/BlockLength: 12 | Exclude: 13 | - 'spec/**/*_spec.rb' 14 | -------------------------------------------------------------------------------- /examples/3d_surface_plot.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | 4 | Gnuplot.open do |gp| 5 | Gnuplot::SPlot.new( gp ) do |plot| 6 | plot.grid 7 | 8 | plot.data = [ 9 | Gnuplot::DataSet.new( "x**2+y**2" ) do |ds| 10 | ds.with = "pm3d" 11 | end 12 | ] 13 | end 14 | sleep 10 15 | end 16 | -------------------------------------------------------------------------------- /spec/support/models/random_generator.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | class RandomGenerator 4 | KAPA = 3.95578 5 | 6 | class << self 7 | def rand 8 | @rand ||= Random.rand 9 | 10 | @rand = KAPA * @rand * (1 - @rand) 11 | end 12 | 13 | def seed(value) 14 | @rand = value.abs % 1 15 | @rand = nil if @rand.zero? 16 | end 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.5.0 as base 2 | 3 | RUN apt-get update && apt-get install -y gnuplot 4 | 5 | RUN useradd -u 1000 gnuplot; \ 6 | mkdir -p /home/gnuplot/gnuplot; \ 7 | chown gnuplot.gnuplot -R /home/gnuplot 8 | 9 | WORKDIR /home/gnuplot/gnuplot 10 | 11 | USER gnuplot 12 | 13 | COPY lib/ ./lib/ 14 | COPY *.gemspec ./ 15 | COPY Gemfile ./ 16 | 17 | RUN gem install bundler; bundle install 18 | -------------------------------------------------------------------------------- /test/sinwave.rb: -------------------------------------------------------------------------------- 1 | require 'gnuplot' 2 | 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new( gp ) do |plot| 5 | 6 | plot.xrange "[-10:10]" 7 | plot.title "Sin Wave Example" 8 | plot.ylabel "x" 9 | plot.xlabel "sin(x)" 10 | 11 | plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds| 12 | ds.with = "lines" 13 | ds.linewidth = 4 14 | end 15 | 16 | end 17 | 18 | end 19 | 20 | -------------------------------------------------------------------------------- /test/arrtest.rb: -------------------------------------------------------------------------------- 1 | require 'gnuplot' 2 | 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new( gp ) do |plot| 5 | 6 | plot.title "Array Plot Example" 7 | plot.ylabel "x" 8 | plot.xlabel "x^2" 9 | 10 | x = (0..50).collect { |v| v.to_f } 11 | y = x.collect { |v| v ** 2 } 12 | 13 | plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| 14 | ds.with = "linespoints" 15 | ds.notitle 16 | end 17 | 18 | end 19 | 20 | end 21 | 22 | -------------------------------------------------------------------------------- /examples/sin_wave.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new( gp ) do |plot| 5 | 6 | plot.xrange "[-10:10]" 7 | plot.title "Sin Wave Example" 8 | plot.ylabel "sin(x)" 9 | plot.xlabel "x" 10 | 11 | plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds| 12 | ds.with = "lines" 13 | ds.linewidth = 4 14 | end 15 | 16 | end 17 | sleep 10 18 | end -------------------------------------------------------------------------------- /examples/discrete_points.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new( gp ) do |plot| 5 | 6 | plot.title "Array Plot Example" 7 | plot.ylabel "x^2" 8 | plot.xlabel "x" 9 | 10 | x = (0..50).collect { |v| v.to_f } 11 | y = x.collect { |v| v ** 2 } 12 | 13 | plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| 14 | ds.with = "linespoints" 15 | ds.notitle 16 | end 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /test/histtest.rb: -------------------------------------------------------------------------------- 1 | require 'gnuplot' 2 | 3 | Gnuplot.open do |gp| 4 | gp << "bin(x, s) = s*int(x/s)\n" 5 | 6 | Gnuplot::Plot.new( gp ) do |plot| 7 | plot.title "Histogram" 8 | plot.xlabel "x" 9 | plot.ylabel "frequency" 10 | 11 | x = (0..500).collect { |v| (rand()-0.5)**3 } 12 | plot.data << Gnuplot::DataSet.new( [x] ) do |ds| 13 | ds.title = "smooth frequency" 14 | ds.using = "(bin($1,.01)):(1.)" 15 | ds.smooth = "freq" 16 | ds.with = "boxes" 17 | end 18 | end 19 | end 20 | 21 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | require 'rake' 3 | require 'rake/clean' 4 | require 'rake/testtask' 5 | require 'rubygems/package_task' 6 | 7 | require_relative 'lib/ruby_gnuplot/version' 8 | 9 | desc 'run unit tests' 10 | task :default => :test 11 | 12 | Rake::TestTask.new do |t| 13 | t.libs << "lib" << 'spec/support' 14 | t.test_files = FileList['test/**/*.rb'] 15 | t.verbose = false 16 | t.warning = false 17 | end 18 | 19 | def gemspec 20 | @clean_gemspec ||= eval(File.read(File.expand_path('../ruby_gnuplot.gemspec', __FILE__))) 21 | end 22 | 23 | Gem::PackageTask.new(gemspec) { |pkg| } 24 | -------------------------------------------------------------------------------- /test/multtest.rb: -------------------------------------------------------------------------------- 1 | require 'gnuplot' 2 | 3 | # File.open( "gnuplot.dat", "w") do |gp| 4 | Gnuplot.open do |gp| 5 | Gnuplot::Plot.new( gp ) do |plot| 6 | 7 | plot.xrange "[-10:10]" 8 | plot.title "Sin Wave Example" 9 | plot.ylabel "x" 10 | plot.xlabel "sin(x)" 11 | 12 | x = (0..50).collect { |v| v.to_f } 13 | y = x.collect { |v| v ** 2 } 14 | 15 | plot.data = [ 16 | Gnuplot::DataSet.new( "sin(x)" ) { |ds| 17 | ds.with = "lines" 18 | ds.title = "String function" 19 | ds.linewidth = 4 20 | }, 21 | 22 | Gnuplot::DataSet.new( [x, y] ) { |ds| 23 | ds.with = "linespoints" 24 | ds.title = "Array data" 25 | } 26 | ] 27 | 28 | end 29 | 30 | end 31 | 32 | -------------------------------------------------------------------------------- /examples/multiple_data_sets.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new( gp ) do |plot| 5 | 6 | plot.xrange "[-10:10]" 7 | plot.title "Sin Wave Example" 8 | plot.ylabel "sin(x)" 9 | plot.xlabel "x" 10 | 11 | x = (0..50).collect { |v| v.to_f } 12 | y = x.collect { |v| v ** 2 } 13 | 14 | plot.data = [ 15 | Gnuplot::DataSet.new( "sin(x)" ) { |ds| 16 | ds.with = "lines" 17 | ds.title = "String function" 18 | ds.linewidth = 4 19 | }, 20 | 21 | Gnuplot::DataSet.new( [x, y] ) { |ds| 22 | ds.with = "linespoints" 23 | ds.title = "Array data" 24 | } 25 | ] 26 | 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /ruby_gnuplot.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'ruby_gnuplot/version' 5 | 6 | Gem::Specification.new do |s| 7 | s.name = 'gnuplot' 8 | s.description = s.summary = "Utility library to aid in interacting with gnuplot from ruby" 9 | s.version = RubyGnuplot::VERSION 10 | s.authors='roger pack' 11 | s.email = "rogerpack2005@gmail.com" 12 | s.homepage = "http://github.com/rdp/ruby_gnuplot/tree/master" 13 | s.license = "BSD" 14 | 15 | s.files = `git ls-files`.split($/) 16 | s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) } 17 | s.test_files = s.files.grep(%r{^(test|spec|features)/}) 18 | s.require_paths = ["lib"] 19 | 20 | s.add_development_dependency 'minitest' 21 | s.add_development_dependency 'rspec', '3.9.0' 22 | s.add_development_dependency 'rubocop', '0.73.0' 23 | s.add_development_dependency 'rubocop-rspec', '1.33.0' 24 | s.add_development_dependency 'simplecov', '0.17.0' 25 | end 26 | -------------------------------------------------------------------------------- /examples/output_image_file.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | 4 | # See sin_wave.rb first 5 | Gnuplot.open do |gp| 6 | Gnuplot::Plot.new( gp ) do |plot| 7 | 8 | # The following lines allow outputting the graph to an image file. 9 | # The first set the kind of image that you want, while the second 10 | # redirects the output to a given file. 11 | # 12 | # Typical terminals: gif, png, postscript, latex, texdraw 13 | # 14 | # See http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/gnuplot_primer/gptermcmp.html 15 | # for a list of recognized terminals. 16 | # 17 | plot.terminal "gif" 18 | plot.output File.expand_path("../sin_wave.gif", __FILE__) 19 | 20 | # see sin_wave.rb 21 | plot.xrange "[-10:10]" 22 | plot.title "Sin Wave Example" 23 | plot.ylabel "sin(x)" 24 | plot.xlabel "x" 25 | 26 | plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds| 27 | ds.with = "lines" 28 | ds.linewidth = 4 29 | end 30 | 31 | end 32 | end 33 | puts 'created sin_wave.gif' 34 | -------------------------------------------------------------------------------- /spec/integration/sinwave_spec.rb: -------------------------------------------------------------------------------- 1 | describe "Sin Wave Plot Example" do 2 | let(:file_path) { 'spec/tmp/sin_wave_plot.eps' } 3 | let(:fixture_path) { 'spec/fixtures/plots/sin_wave_plot.eps' } 4 | 5 | let(:file_content) do 6 | File.read(file_path).gsub(/CreationDate.*/, "") 7 | end 8 | 9 | let(:fixture_content) do 10 | File.read(fixture_path).gsub(/CreationDate.*/, "") 11 | end 12 | 13 | before do 14 | path = file_path 15 | 16 | Gnuplot.open do |gp| 17 | Gnuplot::Plot.new( gp ) do |plot| 18 | plot.xrange "[-10:10]" 19 | plot.title "Sin Wave Example" 20 | plot.ylabel "x" 21 | plot.xlabel "sin(x)" 22 | 23 | plot.term "postscript eps" 24 | plot.output path 25 | 26 | plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds| 27 | ds.with = "lines" 28 | ds.linewidth = 4 29 | end 30 | end 31 | end 32 | end 33 | 34 | after do 35 | File.delete(file_path) 36 | end 37 | 38 | it "plots expected file" do 39 | expect(file_content).to eq(fixture_content) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /examples/histogram.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 2 | require "gnuplot" 3 | Gnuplot.open do |gp| 4 | Gnuplot::Plot.new(gp) do |plot| 5 | 6 | plot.title "Histogram example" 7 | plot.style "data histograms" 8 | plot.xtics "nomirror rotate by -45" 9 | 10 | titles = %w{decade Austria Hungary Belgium} 11 | data = [ 12 | ["1891-1900", 234081, 181288, 18167], 13 | ["1901-1910", 668209, 808511, 41635], 14 | ["1911-1920", 453649, 442693, 33746], 15 | ["1921-1930", 32868, 30680, 15846], 16 | ["1931-1940", 3563, 7861, 4817], 17 | ["1941-1950", 24860, 3469, 12189], 18 | ["1951-1960", 67106, 36637, 18575], 19 | ["1961-1970", 20621, 5401, 9192], 20 | ] 21 | 22 | x = data.collect{|arr| arr.first} 23 | (1..3).each do |col| 24 | y = data.collect{|arr| arr[col]} 25 | plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| 26 | ds.using = "2:xtic(1)" 27 | ds.title = titles[col] 28 | end 29 | end 30 | 31 | end 32 | end -------------------------------------------------------------------------------- /spec/integration/arrtest_spec.rb: -------------------------------------------------------------------------------- 1 | describe "Array Plot Example" do 2 | let(:file_path) { 'spec/tmp/array_plot.eps' } 3 | let(:fixture_path) { 'spec/fixtures/plots/array_plot.eps' } 4 | 5 | let(:file_content) do 6 | File.read(file_path).gsub(/CreationDate.*/, "") 7 | end 8 | 9 | let(:fixture_content) do 10 | File.read(fixture_path).gsub(/CreationDate.*/, "") 11 | end 12 | 13 | before do 14 | path = file_path 15 | 16 | Gnuplot.open do |gp| 17 | Gnuplot::Plot.new( gp ) do |plot| 18 | plot.title "Array Plot Example" 19 | plot.ylabel "x" 20 | plot.xlabel "x^2" 21 | plot.term "postscript eps" 22 | plot.output path 23 | 24 | x = (0..50).collect(&:to_f) 25 | y = x.collect { |v| v**2 } 26 | 27 | plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| 28 | ds.with = "linespoints" 29 | ds.notitle 30 | end 31 | end 32 | end 33 | end 34 | 35 | after do 36 | File.delete(file_path) 37 | end 38 | 39 | it "plots expected file" do 40 | expect(file_content).to eq(fixture_content) 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /spec/integration/histtest_spec.rb: -------------------------------------------------------------------------------- 1 | describe "Histogram Plot Example" do 2 | let(:file_path) { 'spec/tmp/histogram_plot.eps' } 3 | let(:fixture_path) { 'spec/fixtures/plots/histogram_plot.eps' } 4 | 5 | let(:file_content) do 6 | File.read(file_path).gsub(/CreationDate.*/, "") 7 | end 8 | 9 | let(:fixture_content) do 10 | File.read(fixture_path).gsub(/CreationDate.*/, "") 11 | end 12 | 13 | before do 14 | path = file_path 15 | RandomGenerator.seed(0.17) 16 | 17 | collection = (0..500).collect do 18 | (RandomGenerator.rand - 0.5)**3 19 | end 20 | 21 | Gnuplot.open do |gp| 22 | gp << "bin(x, s) = s*int(x/s)\n" 23 | 24 | Gnuplot::Plot.new( gp ) do |plot| 25 | plot.title "Histogram" 26 | plot.xlabel "x" 27 | plot.ylabel "frequency" 28 | 29 | plot.data << Gnuplot::DataSet.new( [collection] ) do |ds| 30 | ds.title = "smooth frequency" 31 | ds.using = "(bin($1,.01)):(1.)" 32 | ds.smooth = "freq" 33 | ds.with = "boxes" 34 | end 35 | 36 | plot.term "postscript eps" 37 | plot.output path 38 | end 39 | end 40 | end 41 | 42 | after do 43 | File.delete(file_path) 44 | end 45 | 46 | it "plots expected file" do 47 | expect(file_content).to eq(fixture_content) 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /spec/integration/multtest_spec.rb: -------------------------------------------------------------------------------- 1 | describe "Multtest Plot Example" do 2 | let(:file_path) { 'spec/tmp/multtest_plot.eps' } 3 | let(:fixture_path) { 'spec/fixtures/plots/multtest_plot.eps' } 4 | 5 | let(:file_content) do 6 | File.read(file_path).gsub(/CreationDate.*/, "") 7 | end 8 | 9 | let(:fixture_content) do 10 | File.read(fixture_path).gsub(/CreationDate.*/, "") 11 | end 12 | 13 | before do 14 | path = file_path 15 | 16 | Gnuplot.open do |gp| 17 | Gnuplot::Plot.new( gp ) do |plot| 18 | plot.xrange "[-10:10]" 19 | plot.title "Sin Wave Example" 20 | plot.ylabel "x" 21 | plot.xlabel "sin(x)" 22 | 23 | plot.term "postscript eps" 24 | plot.output path 25 | 26 | x = (0..50).collect(&:to_f) 27 | y = x.collect { |v| v**2 } 28 | 29 | plot.data = [ 30 | Gnuplot::DataSet.new( "sin(x)" ) do |ds| 31 | ds.with = "lines" 32 | ds.title = "String function" 33 | ds.linewidth = 4 34 | end, 35 | 36 | Gnuplot::DataSet.new( [x, y] ) do |ds| 37 | ds.with = "linespoints" 38 | ds.title = "Array data" 39 | end 40 | ] 41 | end 42 | end 43 | end 44 | 45 | after do 46 | File.delete(file_path) 47 | end 48 | 49 | it "plots expected file" do 50 | expect(file_content).to eq(fixture_content) 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-2005, Gordon James Miller (gmiller@bittwiddlers.com) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | * Neither the name of the BitTwiddlers, Inc. nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /spec/lib/ruby_gnuplot/plot/style_spec.rb: -------------------------------------------------------------------------------- 1 | describe Gnuplot::Plot::Style do 2 | subject(:style) { described_class.new } 3 | 4 | let(:index) { style.index } 5 | 6 | describe '#to_s' do 7 | context "when nothing has been set" do 8 | it 'creates an empty style' do 9 | expect(style.to_s).to eq("set style line #{index}") 10 | end 11 | end 12 | 13 | context 'when setting the stype' do 14 | before do 15 | style.ls = 1 16 | style.lw = 2 17 | style.lc = 3 18 | style.pt = 4 19 | style.ps = 5 20 | style.fs = 6 21 | end 22 | 23 | it 'creates and indexes the style' do 24 | expect(style.to_s).to eq( 25 | "set style line #{index} ls 1 lw 2 lc 3 pt 4 ps 5 fs 6" 26 | ) 27 | end 28 | end 29 | 30 | context 'when setting the stype on initialize' do 31 | subject(:style) do 32 | described_class.new do |style| 33 | style.ls = 1 34 | style.lw = 2 35 | style.lc = 3 36 | style.pt = 4 37 | style.ps = 5 38 | style.fs = 6 39 | end 40 | end 41 | 42 | it 'creates and indexes the style' do 43 | expect(style.to_s).to eq( 44 | "set style line #{index} ls 1 lw 2 lc 3 pt 4 ps 5 fs 6" 45 | ) 46 | end 47 | end 48 | 49 | context 'when setting using the full method name' do 50 | before do 51 | style.linestyle = 1 52 | style.linewidth = 2 53 | style.linecolor = 3 54 | style.pointtype = 4 55 | style.pointsize = 5 56 | style.fill = 6 57 | end 58 | 59 | it 'creates and indexes the style' do 60 | expect(style.to_s).to eq( 61 | "set style line #{index} ls 1 lw 2 lc 3 pt 4 ps 5 fs 6" 62 | ) 63 | end 64 | end 65 | end 66 | end 67 | -------------------------------------------------------------------------------- /spec/lib/ruby_gnuplot/data_set_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe Gnuplot::DataSet do 4 | subject(:data_set) { described_class.new(data) } 5 | 6 | let(:data) { nil } 7 | 8 | describe '#to_gplot' do 9 | context 'when data is an empty array' do 10 | let(:data) { [] } 11 | 12 | it do 13 | expect(data_set.to_gplot).to eq('') 14 | end 15 | end 16 | 17 | context 'when data is an array of numbers' do 18 | let(:data) { [1, 10.0, 2.3] } 19 | 20 | it 'converts to gplot format' do 21 | expect(data_set.to_gplot).to eq("1\n10.0\n2.3") 22 | end 23 | end 24 | 25 | context 'when data is a matrix of numbers' do 26 | let(:data) { [[1, 10.0], [0, 2]] } 27 | 28 | it 'converts to gplot matrix format' do 29 | expect(data_set.to_gplot).to eq("1 0\n10.0 2\ne") 30 | end 31 | end 32 | 33 | context 'when data is a string' do 34 | let(:data) { 'x' } 35 | 36 | it do 37 | expect(data_set.to_gplot).to be_nil 38 | end 39 | end 40 | 41 | context 'when data is an instance of Matrix' do 42 | xit 'to be implemented' 43 | end 44 | 45 | context 'when data is nil' do 46 | it do 47 | expect(data_set.to_gplot).to be_nil 48 | end 49 | 50 | it 'assigns data' do 51 | expect(data_set.data).to eq(data) 52 | end 53 | end 54 | 55 | context 'when setting attributes in a block' do 56 | subject(:data_set) do 57 | described_class.new do |ds| 58 | ds.with = 'lines' 59 | ds.using = '1:2' 60 | ds.data = [ [0, 1, 2], [1, 2, 5] ] 61 | end 62 | end 63 | 64 | it 'returns only the data' do 65 | expect(data_set.to_gplot) 66 | .to eq("0 1\n1 2\n2 5\ne") 67 | end 68 | end 69 | end 70 | 71 | describe '#plot_args' do 72 | context 'when setting attributes on initialize block' do 73 | subject(:data_set) do 74 | described_class.new do |ds| 75 | ds.with = 'lines' 76 | ds.using = '1:2' 77 | ds.data = data 78 | end 79 | end 80 | 81 | let(:data) { [ [0, 1, 2], [1, 2, 5] ] } 82 | 83 | it 'returns plot attributes' do 84 | expect(data_set.plot_args) 85 | .to eq("'-' using 1:2 with lines") 86 | end 87 | end 88 | end 89 | end 90 | -------------------------------------------------------------------------------- /ChangeLog: -------------------------------------------------------------------------------- 1 | 2.6.1 2 | * TheKnight Fix bug in SPlot.to_gplot implementation. 3 | 4 | 2.6.0 5 | * better readme, allow for unsetting variables, thanks @kot-behemoth and @evnu 6 | 7 | 2.5.0 8 | * save output to instance variable, thanks for the patch. 9 | 10 | 2.4.1 11 | * Quote escape more strings. Thanks for the tip! 12 | 13 | 2.4.0 14 | * Allow for 3D plots, fix examples. Thanks everybody! 15 | 16 | 2.3.6 17 | * Cleanup readme (thanks blambeau again, really, for the snippets) 18 | 19 | 2.3.5 20 | * Cleanup readme, add examples as real code files (thanks blambeau!) 21 | 22 | 2.3.4 23 | * Include more files in the gem by switching to Jeweler (thanks Jeweler guyz)! 24 | 25 | 2.3.3 26 | * Fix issue #4 (thanks Jakobs) 27 | * Fix some unit tests (thanks Nobu!) 28 | 29 | 2.3.2 Feb 2010 30 | * Add an arbitrary_lines specifier 31 | 32 | 2.3.1 Feb 2010 33 | 34 | * Fix a bug I introduced in 2.3.0 35 | 36 | 2.3.0 Feb 2010 37 | 38 | * incorporate a few patch changes 39 | 40 | 2.2.3.1 July 18 2009 41 | 42 | * output the raw "to gnuplot" data if $VERBOSE 43 | 44 | Version 2.2.2 July 2009 45 | 46 | * raise if no executable found, should be windows compat. now 47 | 48 | Version 2.2 14-Nov-2005 49 | 50 | * Formally added the LICENSE.txt file. It is the new BSD license as defined 51 | by opensource.org. See that file for details. 52 | 53 | * Added Gnuplot.which to try and fix the recurring problem of windows users 54 | having to hack code to get things working. 55 | 56 | * Added the Gnuplot.gnuplot function so that I can unit test the finding 57 | gnuplot executable routine. 58 | 59 | * In the Array.to_gplot method the terminating e is added to the output. This 60 | is in response to Bug #2209. 61 | 62 | Version 2.1 17-Nov-2004 63 | 64 | * Array.to_gplot and Array.to_gsplot now support passing in arrays of 65 | arbitrary objects. This is in response to a request by Yoshiki Tsunesada 66 | (Tracker ID 1063) 67 | 68 | Version 2.0 10-Nov-2004 69 | 70 | * The 2.0 version of the gnuplot interface is a cross between the original, 71 | object oriented version, and the version 1.0 which was simply a string 72 | manipulation library. 73 | 74 | 75 | h3. Version 0.9 76 | 77 | bq. 78 | My first attempt at a Ruby interface to gnuplot was an object interface 79 | encapsulating gnuplot language. This was taken directly from the Python 80 | gnuplot interface. In spite of my being very familiar with Gnuplot and 81 | Ruby and being the author of the RGnuplot package, I found it 82 | non-intuitive to use the RGnuplot package. I found myself constantly 83 | looking at the code to figure out what I needed to do. 84 | This was not sufficient and did not sit well. 85 | 86 | h3. Version 1.0 87 | 88 | bq. 89 | The second attempt at a Ruby interface was to do absolutely nothing but 90 | use Ruby's built in string manipulation methods. This meant that I 91 | could simply use my knowledge of Gnuplot without having to worry about 92 | objects. 93 | While in some ways an improvement over Version 0.9, it still did not sit 94 | well with me. 95 | 96 | h3. Version 2.0 97 | 98 | bq. 99 | After attending RubyConf 2004 I was inspired by Rich Kilmer's use of 100 | Ruby to implement domain specific languages. That is the current 101 | implementation of Gnuplot and quite probably the one that I'll stick 102 | with for some time. This version combines the direct mapping of the 103 | gnuplot language without wrapping with the ruby syntax and mechanism of 104 | adding methods to existing classes to interface Ruby objects with 105 | gnuplot. 106 | 107 | h2. Setup 108 | 109 | h3. Version 2.2 110 | 111 | If the 'gnuplot' command is in your path then there is no required 112 | setup. If the gnuplot executable for your system is called something other 113 | than simply 'gnuplot' then set the RB_GNUPLOT environment variable to the 114 | name of the executable. This must either be a full path to the gnuplot 115 | command or an executable filename that exists in your PATH environment 116 | variable. 117 | -------------------------------------------------------------------------------- /test/test_gnuplot.rb: -------------------------------------------------------------------------------- 1 | # -*- ruby -*- 2 | 3 | require 'gnuplot' 4 | require 'minitest/autorun' 5 | 6 | class StdDataTest < MiniTest::Test 7 | 8 | def test_array_1d 9 | data = (0..5).to_a 10 | ds = Gnuplot::DataSet.new( data ) 11 | 12 | assert data == ds.data 13 | assert data.join("\n") + "\n", ds.to_gplot 14 | end 15 | 16 | def test_empty_array 17 | data = [] 18 | ds = Gnuplot::DataSet.new( data ) 19 | 20 | assert data == ds.data 21 | assert "" == ds.to_gplot 22 | end 23 | 24 | 25 | # Test a multidimensional array. 26 | 27 | def test_array_nd 28 | d1 = (0..3).to_a 29 | d2 = d1.collect { |v| 3 * v } 30 | d3 = d2.collect { |v| 4 * v } 31 | 32 | data = [ d1, d2, d3 ] 33 | ds = Gnuplot::DataSet.new( data ) 34 | 35 | assert data == ds.data 36 | assert "0 0 0\n1 3 12\n2 6 24\n3 9 36\n", ds.to_gplot 37 | end 38 | end 39 | 40 | 41 | class DataSetTest < MiniTest::Test 42 | 43 | def test_yield_ctor 44 | ds = Gnuplot::DataSet.new do |ds| 45 | ds.with = "lines" 46 | ds.using = "1:2" 47 | ds.data = [ [0, 1, 2], [1, 2, 5] ] 48 | end 49 | 50 | assert "lines", ds.with 51 | assert "1:2", ds.using 52 | assert nil == ds.title 53 | assert [ [0, 1, 2], [1, 2, 5] ] == ds.data 54 | assert "'-' using 1:2 with lines", ds.plot_args 55 | assert "0 1\n1 2\n2 5\n", ds.to_gplot 56 | end 57 | 58 | end 59 | 60 | 61 | class PlotTest < MiniTest::Test 62 | 63 | def test_no_data 64 | plot = Gnuplot::Plot.new do |p| 65 | p.set "output", "'foo'" 66 | p.set "terminal", "postscript enhanced" 67 | p.unset "border" 68 | end 69 | 70 | assert( plot.settings == 71 | [ [:set, "output", "'foo'"], 72 | [:set, "terminal", "postscript enhanced"], 73 | [:unset, "border"] ] ) 74 | 75 | 76 | assert( plot.to_gplot, \ 77 | "set output 'foo'\nset terminal postscript enhanced\n" ) 78 | 79 | end 80 | 81 | def test_set 82 | plot = Gnuplot::Plot.new do |p| 83 | p.set "title", "foo" 84 | end 85 | assert "'foo'", plot["title"] 86 | 87 | plot.set "title", "'foo'" 88 | assert "'foo'", plot["title"] 89 | end 90 | 91 | def test_unset 92 | plot = Gnuplot::Plot.new do |p| 93 | p.unset "title" 94 | end 95 | assert_nil plot["title"] 96 | 97 | plot.unset "title" 98 | assert_nil plot["title"] 99 | end 100 | 101 | def test_style 102 | plot = Gnuplot::Plot.new do |p| 103 | s1 = p.style do |s| 104 | s.ls = 1 105 | s.lt = 1 106 | s.lc = 1 107 | s.pt = 1 108 | s.ps = 1 109 | end 110 | assert s1.to_s == "set style line 1 ls 1 lt 1 lc 1 pt 1 ps 1", "correct style definition" 111 | assert s1.index == 1, "set index correctly" 112 | 113 | s2 = p.style do |s| 114 | s.ls = 2 115 | end 116 | assert s2.to_s == "set style line 2 ls 2", "correct style definition" 117 | assert s2.index == 2, "index must be incremented" 118 | 119 | ds = Gnuplot::DataSet.new do |ds| 120 | ds.with = "lines" 121 | ds.linestyle = s1 122 | ds.data = [ [0, 1, 2], [1, 2, 5] ] 123 | end 124 | 125 | assert ds.plot_args == "'-' with lines linestyle 1", "convert linestyle to index" # index of s1 126 | end 127 | end 128 | 129 | end 130 | 131 | 132 | require 'rbconfig' 133 | CONFIG = RbConfig::MAKEFILE_CONFIG 134 | 135 | # This attempts to test the functions that comprise the gnuplot package. Most 136 | # of the bug reports that I get for this package have to do with finding the 137 | # gnuplot executable under different environments so that makes it difficult 138 | # to test on a single environment. To try to get around this I'm using the 139 | # rbconfig library and its path to the sh environment variable. 140 | 141 | class GnuplotModuleTest 142 | 143 | def test_which 144 | # Put the spaces around the command to make sure that it gets stripped 145 | # properly. 146 | assert( CONFIG["SHELL"], Gnuplot::which(" sh " ) ) 147 | assert( CONFIG["SHELL"], Gnuplot::which( CONFIG["SHELL"] ) ) 148 | end 149 | 150 | 151 | def test_gnuplot 152 | cmd = Gnuplot.gnuplot 153 | assert( Gnuplot::which("gnuplot") + " -persist", cmd ) 154 | 155 | cmd = Gnuplot.gnuplot(false) 156 | assert( Gnuplot::which("gnuplot"), cmd ) 157 | 158 | # If I set the name of the gnuplot environment variable to a different 159 | # name (one that is in the path) then I should get the shell name as the 160 | # result of the gnuplot call. 161 | 162 | ENV["RB_GNUPLOT"] = "sh" 163 | assert( CONFIG["SHELL"], Gnuplot.gnuplot(false) ) 164 | end 165 | 166 | end 167 | 168 | 169 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file was generated by the `rspec --init` command. Conventionally, all 2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 3 | # The generated `.rspec` file contains `--require spec_helper` which will cause 4 | # this file to always be loaded, without a need to explicitly require it in any 5 | # files. 6 | # 7 | # Given that it is always loaded, you are encouraged to keep this file as 8 | # light-weight as possible. Requiring heavyweight dependencies from this file 9 | # will add to the boot time of your test suite on EVERY test run, even for an 10 | # individual file that may not need all of that loaded. Instead, consider making 11 | # a separate helper file that requires the additional dependencies and performs 12 | # the additional setup, and require it from the spec files that actually need 13 | # it. 14 | # 15 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 16 | require 'simplecov' 17 | SimpleCov.start do 18 | add_filter '/spec/' 19 | end 20 | 21 | require "gnuplot" 22 | 23 | support_files = File.expand_path('spec/support/**/*.rb') 24 | 25 | Dir[support_files].sort.each { |file| require file } 26 | 27 | RSpec.configure do |config| 28 | # rspec-expectations config goes here. You can use an alternate 29 | # assertion/expectation library such as wrong or the stdlib/minitest 30 | # assertions if you prefer. 31 | config.expect_with :rspec do |expectations| 32 | # This option will default to `true` in RSpec 4. It makes the `description` 33 | # and `failure_message` of custom matchers include text for helper methods 34 | # defined using `chain`, e.g.: 35 | # be_bigger_than(2).and_smaller_than(4).description 36 | # # => "be bigger than 2 and smaller than 4" 37 | # ...rather than: 38 | # # => "be bigger than 2" 39 | expectations.include_chain_clauses_in_custom_matcher_descriptions = true 40 | end 41 | 42 | # rspec-mocks config goes here. You can use an alternate test double 43 | # library (such as bogus or mocha) by changing the `mock_with` option here. 44 | config.mock_with :rspec do |mocks| 45 | # Prevents you from mocking or stubbing a method that does not exist on 46 | # a real object. This is generally recommended, and will default to 47 | # `true` in RSpec 4. 48 | mocks.verify_partial_doubles = true 49 | end 50 | 51 | # This option will default to `:apply_to_host_groups` in RSpec 4 (and will 52 | # have no way to turn it off -- the option exists only for backwards 53 | # compatibility in RSpec 3). It causes shared context metadata to be 54 | # inherited by the metadata hash of host groups and examples, rather than 55 | # triggering implicit auto-inclusion in groups with matching metadata. 56 | config.shared_context_metadata_behavior = :apply_to_host_groups 57 | 58 | # The settings below are suggested to provide a good initial experience 59 | # with RSpec, but feel free to customize to your heart's content. 60 | # # This allows you to limit a spec run to individual examples or groups 61 | # # you care about by tagging them with `:focus` metadata. When nothing 62 | # # is tagged with `:focus`, all examples get run. RSpec also provides 63 | # # aliases for `it`, `describe`, and `context` that include `:focus` 64 | # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. 65 | # config.filter_run_when_matching :focus 66 | # 67 | # # Allows RSpec to persist some state between runs in order to support 68 | # # the `--only-failures` and `--next-failure` CLI options. We recommend 69 | # # you configure your source control system to ignore this file. 70 | # config.example_status_persistence_file_path = "spec/examples.txt" 71 | # 72 | # # Limits the available syntax to the non-monkey patched syntax that is 73 | # # recommended. For more details, see: 74 | # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ 75 | # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ 76 | # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode 77 | # config.disable_monkey_patching! 78 | # 79 | # # This setting enables warnings. It's recommended, but in some cases may 80 | # # be too noisy due to issues in dependencies. 81 | # config.warnings = true 82 | # 83 | # # Many RSpec users commonly either run the entire suite or an individual 84 | # # file, and it's useful to allow more verbose output when running an 85 | # # individual spec file. 86 | # if config.files_to_run.one? 87 | # # Use the documentation formatter for detailed output, 88 | # # unless a formatter has already been configured 89 | # # (e.g. via a command-line flag). 90 | # config.default_formatter = "doc" 91 | # end 92 | # 93 | # # Print the 10 slowest examples and example groups at the 94 | # # end of the spec run, to help surface which specs are running 95 | # # particularly slow. 96 | # config.profile_examples = 10 97 | # 98 | # # Run specs in random order to surface order dependencies. If you find an 99 | # # order dependency and want to debug it, you can fix the order by providing 100 | # # the seed, which is printed after each run. 101 | # # --seed 1234 102 | # config.order = :random 103 | # 104 | # # Seed global randomization in this process using the `--seed` CLI option. 105 | # # Setting this allows you to use `--seed` to deterministically reproduce 106 | # # test failures related to randomization by passing the same `--seed` value 107 | # # as the one that triggered the failure. 108 | # Kernel.srand config.seed 109 | end 110 | -------------------------------------------------------------------------------- /spec/lib/ruby_gnuplot/plot_spec.rb: -------------------------------------------------------------------------------- 1 | shared_examples 'quotes value when setting in a plot for' do |field| 2 | describe "##{field}" do 3 | before do 4 | plot.public_send(field, 'text') 5 | end 6 | 7 | let(:expected_settings) do 8 | [ 9 | [:set, field.to_s, '"text"'], 10 | [:set, field.to_s, '"new text"'] 11 | ] 12 | end 13 | 14 | it 'quotes value when setting it' do 15 | expect(plot.to_gplot).to eq("set #{field} \"text\"\n") 16 | end 17 | 18 | it 'enquees into settings' do 19 | expect { plot.public_send(field, 'new text') } 20 | .to change(plot, :settings) 21 | .from([[:set, field.to_s, '"text"']]) 22 | .to(expected_settings) 23 | end 24 | end 25 | end 26 | 27 | describe Gnuplot::Plot do 28 | subject(:plot) { described_class.new } 29 | 30 | describe '#to_gplot' do 31 | let(:expected_string) do 32 | [ 33 | 'set title "Array Plot Example"', 34 | 'set ylabel "x"', 35 | 'set xlabel "x^2"', 36 | 'set term postscript eps', 37 | 'set output "file.eps"', 38 | '' 39 | ].join("\n") 40 | end 41 | 42 | context 'when nothing has been set' do 43 | it "returns an empty string" do 44 | expect(plot.to_gplot).to eq('') 45 | end 46 | end 47 | 48 | context 'when titles and labels have been set' do 49 | before do 50 | plot.title "Array Plot Example" 51 | plot.ylabel "x" 52 | plot.xlabel "x^2" 53 | plot.term "postscript eps" 54 | plot.output "file.eps" 55 | end 56 | 57 | it "wraps strings with quotes when needed" do 58 | expect(plot.to_gplot).to eq(expected_string) 59 | end 60 | end 61 | 62 | context 'when variables are set throgh set call' do 63 | before do 64 | plot.set "title", "Array Plot Example" 65 | plot.set "ylabel", "x" 66 | plot.set "xlabel", "x^2" 67 | plot.set "term", "postscript eps" 68 | plot.set "output", "file.eps" 69 | end 70 | 71 | it "wraps strings with quotes when needed" do 72 | expect(plot.to_gplot).to eq(expected_string) 73 | end 74 | end 75 | 76 | context "when setting from inside initialization" do 77 | subject(:plot) do 78 | described_class.new do |p| 79 | p.title "Array Plot Example" 80 | p.ylabel "x" 81 | p.xlabel "x^2" 82 | p.term "postscript eps" 83 | p.output "file.eps" 84 | end 85 | end 86 | 87 | it "wraps strings with quotes when needed" do 88 | expect(plot.to_gplot).to eq(expected_string) 89 | end 90 | end 91 | end 92 | 93 | it_behaves_like 'quotes value when setting in a plot for', :title 94 | it_behaves_like 'quotes value when setting in a plot for', :output 95 | it_behaves_like 'quotes value when setting in a plot for', :xlabel 96 | it_behaves_like 'quotes value when setting in a plot for', :x2label 97 | it_behaves_like 'quotes value when setting in a plot for', :ylabel 98 | it_behaves_like 'quotes value when setting in a plot for', :y2label 99 | it_behaves_like 'quotes value when setting in a plot for', :clabel 100 | it_behaves_like 'quotes value when setting in a plot for', :cblabel 101 | it_behaves_like 'quotes value when setting in a plot for', :zlabel 102 | 103 | describe '#unset' do 104 | let(:expected_string) do 105 | [ 106 | 'set title "My Title"', 107 | 'unset title', 108 | '' 109 | ].join("\n") 110 | end 111 | 112 | before do 113 | plot.title 'My Title' 114 | end 115 | 116 | it 'changes value in current settings' do 117 | expect { plot.unset 'title' } 118 | .to change { plot['title'] } 119 | .from('"My Title"').to(nil) 120 | end 121 | 122 | it 'unsets key on output' do 123 | plot.unset 'title' 124 | expect(plot.to_gplot).to eq(expected_string) 125 | end 126 | end 127 | 128 | describe '#[]' do 129 | context 'when value was never set' do 130 | it { expect(plot['key']).to be_nil } 131 | end 132 | 133 | context 'when value was only unset' do 134 | before { plot.unset 'title' } 135 | 136 | it { expect(plot['title']).to be_nil } 137 | end 138 | 139 | context 'when value was set only once' do 140 | before { plot.title "My Title" } 141 | 142 | it "returns the value to be used (quoted when needed)" do 143 | expect(plot['title']).to eq('"My Title"') 144 | end 145 | end 146 | 147 | context 'when value was set twice' do 148 | before do 149 | plot.title "My Title" 150 | plot.title "My New Title" 151 | end 152 | 153 | it "returns the last value set" do 154 | expect(plot['title']).to eq('"My New Title"') 155 | end 156 | end 157 | 158 | context 'when value was set then unset' do 159 | before do 160 | plot.title "My Title" 161 | plot.unset "title" 162 | end 163 | 164 | it { expect(plot['title']).to be_nil } 165 | end 166 | 167 | context 'when value was set, unset and set again' do 168 | before do 169 | plot.title "My Title" 170 | plot.unset "title" 171 | plot.title "My New Title" 172 | end 173 | 174 | it "returns the last value set" do 175 | expect(plot['title']).to eq('"My New Title"') 176 | end 177 | end 178 | end 179 | 180 | describe 'method missing' do 181 | it 'delegates to set call' do 182 | expect { plot.fake_field('value') } 183 | .to change(plot, :settings) 184 | .from([]) 185 | .to([[:set, 'fake_field', 'value']]) 186 | end 187 | 188 | context 'when field should be quoted' do 189 | it 'delegates to set call and quote it' do 190 | expect { plot.output('value') } 191 | .to change(plot, :settings) 192 | .from([]) 193 | .to([[:set, 'output', '"value"']]) 194 | end 195 | end 196 | end 197 | 198 | describe '#style' do 199 | subject(:plot) do 200 | described_class.new do |p| 201 | p.title 'My title' 202 | p.style do |style| 203 | style.ls = 1 204 | end 205 | end 206 | end 207 | 208 | let(:expected_output) do 209 | /^set title "My title"\nset style line \d+ ls 1\n$/ 210 | end 211 | 212 | it 'adds style to gplot output' do 213 | expect(plot.to_gplot).to match(expected_output) 214 | end 215 | end 216 | end 217 | -------------------------------------------------------------------------------- /README.textile: -------------------------------------------------------------------------------- 1 | h1. Ruby Gnuplot - How To 2 | 3 | p=. 4 | ["ChangeLog":/ChangeLog] 5 | ["Authors":AUTHORS.txt] 6 | ["License":LICENSE.txt] 7 | 8 | h2. History and Background 9 | 10 | Gnuplot is a program that has a rich language for the generation of 11 | plots. It has a unique place in academia as it was one of the first 12 | freely available programs for plot generation. I started using gnuplot 13 | over 10 years ago while pursuing my Master's degree in Physics and have 14 | been using it actively ever since. Now rdp maintains it. 15 | See also the changelog for more detail. 16 | 17 | h2. Pre-requisites and Installation 18 | 19 | 1. (mac) Install XQuartz from here: 20 | @http://xquartz.macosforge.org/landing/@ 21 | 22 | 2. Install gnuplot with homebrew (not OS X? install it using your package manager): 23 | @brew install gnuplot --with-x11@ 24 | 25 | 3. Install gnuplot gem: 26 | @gem install gnuplot@ 27 | 28 | h2. Ruby Gnuplot Concepts 29 | 30 | Gnuplot has a very simple conceptual model. Calls to _Set_ are 31 | made to set parameters and either _Plot_ or _Splot_ is 32 | called to generate the actual plot. The _dataset_ to be 33 | plotted can be specified in a number of ways, contained in a separate 34 | file, generated from a function, read from standard input, or read 35 | immediately after the plot command. 36 | 37 | 38 | The object model for the Ruby gnuplot wrapper directly mimics this 39 | layout and flow. The following are the standard steps for generating a 40 | plot: 41 | 42 | 43 | 1. Instantiate a @Plot@ or @Splot@ object and set parameters by gnuplot variable name. 44 | 45 | 2. Instantiate @DataSet@ objects and attach Ruby objects containing the data to be plotted to the @DataSet@. Attach properties that modify the plot command using the modifier name. 46 | 47 | 3. Send the @Plot@/@Splot@ object to a @Gnuplot@ instance for plotting. 48 | 49 | The Version 2.0 interface makes very heavy use of blocks leading to very 50 | readable code. 51 | 52 | @Gnuplot.open@ 53 | 54 | bq. 55 | Instantiates a new Gnuplot process. The path to the executable is 56 | determined on a Unix or MacOSX system using the which command. Windows 57 | users, I have no idea what to do. 58 | If a block is given to the function the opened process is passed into 59 | the block. This mimics the most common usage of the @File.open@ method. 60 | 61 | @Plot.new@ 62 | 63 | 64 | @SPlot.new@ 65 | 66 | bq. 67 | Create a new @Plot@ or @SPlot@ object. @DataSet@ s are attached to the object 68 | to specify the data and its properties. 69 | If a block is given to the function, the plot object is passed into the 70 | block. 71 | 72 | @DataSet.new@ 73 | 74 | bq. 75 | Associates a Ruby object containing the data to plot with the properties 76 | that will be passed to the plot command for that dataset. Any Ruby 77 | object can be associated with a @DataSet@ as long as it understands the 78 | @to_gplot@ method. 79 | 80 | @to_gplot@ 81 | 82 | bq. 83 | Within Gnuplot, plot data is read in very simple formats. The 84 | @to_gplot@ method is expected to write the data of the object in a format 85 | that is understandable by Gnuplot. One of the many great things about 86 | Ruby is that methods can be added after the original declaration. The 87 | gnuplot module defines the @to_gplot@ method on the following classes: 88 | @Array@, @String@, and @Matrix@. 89 | Simply define a @to_gplot@ method on your own class to tie the class into 90 | gnuplot. 91 | 92 | h2. Examples 93 | 94 | 95 | h3. Simple sin wave 96 | 97 | bq. The following example simply plots the value of sin(x) between the 98 | ranges of -10 and 10. A few points to notice: 99 | 100 | * The code uses nested blocks to construct the plot. The newly created object is passed to the block so it can be modified in place. 101 | 102 | * Each of the gnuplot plot variables are modified using the variable name as a method name on the plot object or on the dataset object. The wrapper also takes care of the single quoting that is required on some of the variables like @title@, @ylabel@, and @xlabel@. 103 | 104 | * The plot object simply has an array of @DataSet@s. The constructor initializes this empty array before yielding to the block. This method uses the @<<@ operator to add the @DataSet@ to the plot. 105 | 106 | * When the plot block ends, if an @IO@ object is given to the @Plot@ constructor, the plot commands will be written to the @IO@ object. Any object can be passed to the constructor as long as it understands the @<<@ operator. 107 | 108 |
109 | Gnuplot.open do |gp| 110 | Gnuplot::Plot.new( gp ) do |plot| 111 | 112 | plot.xrange "[-10:10]" 113 | plot.title "Sin Wave Example" 114 | plot.xlabel "x" 115 | plot.ylabel "sin(x)" 116 | 117 | plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds| 118 | ds.with = "lines" 119 | ds.linewidth = 4 120 | end 121 | 122 | end 123 | 124 | end 125 |126 | 127 | Or you can write it out to a file (the above snippet displays the graph, in Linux, but in windows you'd need to write it to a file). 128 | 129 | See the file @examples/output_image_file.rb@. 130 | 131 | h3. Plotting discrete points 132 | 133 | Array data can be plotted quite easily since @Array@s have a defined @to_gplot@ method. 134 | 135 | Simply pass an array of data to the constructor of the @DataSet@ object or set the data property of the @DataSet@. In this example, because there are two arrays, each array will be a single column of data to the gnuplot process. 136 | 137 |
138 | Gnuplot.open do |gp|
139 | Gnuplot::Plot.new( gp ) do |plot|
140 |
141 | plot.title "Array Plot Example"
142 | plot.xlabel "x"
143 | plot.ylabel "x^2"
144 |
145 | x = (0..50).collect { |v| v.to_f }
146 | y = x.collect { |v| v ** 2 }
147 |
148 | plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
149 | ds.with = "linespoints"
150 | ds.notitle
151 | end
152 | end
153 | end
154 |
155 |
156 | h3. Multiple Data Sets
157 |
158 | As many data sets as are desired can be attached to a plot. Each of these can have their own plot modifiers. Notice in this example how the data array is explicitly set instead of using the @<<@ operator.
159 |
160 | Also in this example, the commands are not written to the Gnuplot process but are instead written to a File called @gnuplot.dat@. This file can later be run directly by a gnuplot process as it contains only the gnuplot commands.
161 |
162 |
163 | File.open( "gnuplot.dat", "w") do |gp|
164 | Gnuplot::Plot.new( gp ) do |plot|
165 |
166 | plot.xrange "[-10:10]"
167 | plot.title "Sin Wave Example"
168 | plot.ylabel "x"
169 | plot.xlabel "sin(x)"
170 |
171 | x = (0..50).collect { |v| v.to_f }
172 | y = x.collect { |v| v ** 2 }
173 |
174 | plot.data = [
175 | Gnuplot::DataSet.new( "sin(x)" ) { |ds|
176 | ds.with = "lines"
177 | ds.title = "String function"
178 | ds.linewidth = 4
179 | },
180 |
181 | Gnuplot::DataSet.new( [x, y] ) { |ds|
182 | ds.with = "linespoints"
183 | ds.title = "Array data"
184 | }
185 | ]
186 |
187 | end
188 | end
189 |
190 |
191 | h3. Miscellanrous
192 |
193 | You can also add arbitrary lines to the output
194 |
195 | 196 | plot.arbitrary_lines << "set ylabel \"y label\" font \"Helvetica,20\"" 197 |198 | 199 | See more in the examples folder. Also since this is basically just a wrapper for gnuplot itself, you should be able to do anything that it can do (demos: 200 | http://gnuplot.sourceforge.net/demo_4.4/ ) 201 | 202 | h3. Security 203 | 204 | Note that if you pass any user-controlled strings to the gem, it's possible for an attacker to run arbitrary commands. 205 | 206 | In addition to title, any other graph properties that accept strings should be affected too. they're all passed to the system command. So only use strings you trust. 207 | -------------------------------------------------------------------------------- /lib/gnuplot.rb: -------------------------------------------------------------------------------- 1 | # Methods and variables for interacting with the gnuplot process. Most of 2 | # these methods are for sending data to a gnuplot process, not for reading from 3 | # it. Most of the methods are implemented as added methods to the built in 4 | # classes. 5 | 6 | require 'matrix' 7 | 8 | module Gnuplot 9 | 10 | # Trivial implementation of the which command that uses the PATH environment 11 | # variable to attempt to find the given application. The application must 12 | # be executable and reside in one of the directories in the PATH environment 13 | # to be found. The first match that is found will be returned. 14 | # 15 | # bin [String] The name of the executable to search for. 16 | # 17 | # Return the full path to the first match or nil if no match is found. 18 | # 19 | def Gnuplot.which ( bin ) 20 | if RUBY_PLATFORM =~ /mswin|mingw/ 21 | all = [bin, bin + '.exe'] 22 | else 23 | all = [bin] 24 | end 25 | for exec in all 26 | if which_helper(exec) 27 | return which_helper(exec) 28 | end 29 | end 30 | return nil 31 | end 32 | 33 | def Gnuplot.which_helper bin 34 | return bin if File::executable? bin 35 | 36 | path = ENV['PATH'] 37 | path.split(File::PATH_SEPARATOR).each do |dir| 38 | candidate = File::join dir, bin.strip 39 | return candidate if File::executable? candidate 40 | end 41 | 42 | # This is an implementation that works when the which command is 43 | # available. 44 | # 45 | # IO.popen("which #{bin}") { |io| return io.readline.chomp } 46 | 47 | return nil 48 | end 49 | 50 | # Find the path to the gnuplot executable. The name of the executable can 51 | # be specified using the RB_GNUPLOT environment variable but will default to 52 | # the command 'gnuplot'. 53 | # 54 | # persist [bool] Add the persist flag to the gnuplot executable 55 | # 56 | # Return the path to the gnuplot executable or nil if one cannot be found. 57 | def Gnuplot.gnuplot( persist = true ) 58 | exe_loc = which( ENV['RB_GNUPLOT'] || 'gnuplot' ) 59 | raise 'gnuplot executable not found on path' unless exe_loc 60 | cmd = '"' + exe_loc + '"' 61 | cmd += " -persist" if persist 62 | cmd 63 | end 64 | 65 | # Open a gnuplot process that exists in the current PATH. If the persist 66 | # flag is true then the -persist flag is added to the command line. The 67 | # path to the gnuplot executable is determined using the 'which' command. 68 | # 69 | # See the gnuplot documentation for information on the persist flag. 70 | # 71 | # todo Add a method to pass the gnuplot path to the function. 72 | 73 | def Gnuplot.open( persist=true ) 74 | cmd = Gnuplot.gnuplot( persist ) 75 | IO::popen( cmd, "w+") { |io| 76 | yield io 77 | io.close_write 78 | @output = io.read 79 | } 80 | return @output 81 | end 82 | 83 | 84 | 85 | # Holds command information and performs the formatting of that command 86 | # information to a Gnuplot process. When constructing a new plot for 87 | # gnuplot, this is the first object that must be instantiated. On this 88 | # object set the various properties and add data sets. 89 | 90 | class Plot 91 | attr_accessor :cmd, :data, :settings 92 | 93 | QUOTED = [ "title", "output", "xlabel", "x2label", "ylabel", "y2label", "clabel", "cblabel", "zlabel" ] 94 | 95 | def initialize (io = nil, cmd = "plot") 96 | @cmd = cmd 97 | @settings = [] 98 | @arbitrary_lines = [] 99 | @data = [] 100 | @styles = [] 101 | yield self if block_given? 102 | $stderr.puts "writing this to gnuplot:\n" + to_gplot + "\n" if $VERBOSE 103 | 104 | if io 105 | io << to_gplot 106 | io << store_datasets 107 | end 108 | end 109 | attr_accessor :arbitrary_lines 110 | 111 | # Invoke the set method on the plot using the name of the invoked method 112 | # as the set variable and any arguments that have been passed as the 113 | # value. See the +set+ method for more details. 114 | 115 | def method_missing( methId, *args ) 116 | set methId.id2name, *args 117 | end 118 | 119 | 120 | # Set a variable to the given value. +Var+ must be a gnuplot variable and 121 | # +value+ must be the value to set it to. Automatic quoting will be 122 | # performed if the variable requires it. 123 | # 124 | # This is overloaded by the +method_missing+ method so see that for more 125 | # readable code. 126 | 127 | def set ( var, value = "" ) 128 | value = "\"#{value}\"" if QUOTED.include? var unless value =~ /^'.*'$/ 129 | @settings << [ :set, var, value ] 130 | end 131 | 132 | # Unset a variable. +Var+ must be a gnuplot variable. 133 | def unset ( var ) 134 | @settings << [ :unset, var ] 135 | end 136 | 137 | 138 | # Return the current value of the variable. This will return the setting 139 | # that is currently in the instance, not one that's been given to a 140 | # gnuplot process. 141 | 142 | def [] ( var ) 143 | v = @settings.reverse.rassoc( var ) 144 | if v.nil? or v.first == :unset 145 | nil 146 | else 147 | v[2] 148 | end 149 | end 150 | 151 | class Style 152 | attr_accessor :linestyle, :linetype, :linewidth, :linecolor, 153 | :pointtype, :pointsize, :fill, :index 154 | 155 | alias :ls :linestyle 156 | alias :lt :linetype 157 | alias :lw :linewidth 158 | alias :lc :linecolor 159 | alias :pt :pointtype 160 | alias :ps :pointsize 161 | alias :fs :fill 162 | 163 | alias :ls= :linestyle= 164 | alias :lt= :linetype= 165 | alias :lw= :linewidth= 166 | alias :lc= :linecolor= 167 | alias :pt= :pointtype= 168 | alias :ps= :pointsize= 169 | alias :fs= :fill= 170 | 171 | STYLES = [:ls, :lt, :lw, :lc, :pt, :ps, :fs] 172 | 173 | def Style.increment_index 174 | @index ||= 0 175 | @index += 1 176 | 177 | @index 178 | end 179 | 180 | def initialize 181 | STYLES.each do |s| 182 | send("#{s}=", nil) 183 | end 184 | yield self if block_given? 185 | 186 | # only set the index if the user didn't do it 187 | @index = Style::increment_index if index.nil? 188 | end 189 | 190 | def to_s 191 | str = "set style line #{index}" 192 | STYLES.each do |s| 193 | style = send(s) 194 | if not style.nil? 195 | str << " #{s} #{style}" 196 | end 197 | end 198 | 199 | str 200 | end 201 | end 202 | 203 | # Create a gnuplot linestyle 204 | def style &blk 205 | s = Style.new &blk 206 | @styles << s 207 | s 208 | end 209 | 210 | def add_data ( ds ) 211 | @data << ds 212 | end 213 | 214 | 215 | def to_gplot (io = "") 216 | @settings.each do |setting| 217 | io << setting.map(&:to_s).join(" ") << "\n" 218 | end 219 | @styles.each{|s| io << s.to_s << "\n"} 220 | @arbitrary_lines.each{|line| io << line << "\n" } 221 | 222 | io 223 | end 224 | 225 | def store_datasets (io = "") 226 | if @data.size > 0 227 | io << @cmd << " " << @data.collect { |e| e.plot_args }.join(", ") 228 | io << "\n" 229 | 230 | v = @data.collect { |ds| ds.to_gplot } 231 | io << v.compact.join("e\n") 232 | end 233 | 234 | io 235 | end 236 | end 237 | 238 | # Analogous to Plot class, holds command information and performs the formatting of that command 239 | # information to a Gnuplot process. Should be used when for drawing 3D plots. 240 | 241 | class SPlot < Plot 242 | 243 | def initialize (io = nil, cmd = "splot") 244 | super 245 | end 246 | 247 | # Currently using the implementation from parent class Plot. 248 | # Leaving the method explicit here, though, as to allow an specific 249 | # implementation for SPlot in the future. 250 | def to_gplot (io = "") 251 | super 252 | end 253 | 254 | end 255 | 256 | 257 | # Container for a single dataset being displayed by gnuplot. Each object 258 | # has a reference to the actual data being plotted as well as settings that 259 | # control the "plot" command. The data object must support the to_gplot 260 | # command. 261 | # 262 | # +data+ The data that will be plotted. The only requirement is that the 263 | # object understands the to_gplot method. 264 | # 265 | # The following attributes correspond to their related string in the gnuplot 266 | # command. See the gnuplot documentation for more information on this. 267 | # 268 | # title, with 269 | # 270 | # @todo Use the delegator to delegate to the data property. 271 | 272 | class DataSet 273 | attr_accessor :title, :with, :using, :data, :linewidth, :linecolor, :matrix, :smooth, :axes, :index, :linestyle 274 | 275 | alias :ls :linestyle 276 | alias :ls= :linestyle= 277 | 278 | def initialize (data = nil) 279 | @data = data 280 | @linestyle = @title = @with = @using = @linewidth = @linecolor = @matrix = 281 | @smooth = @axes = @index = nil # avoid warnings 282 | yield self if block_given? 283 | end 284 | 285 | def notitle 286 | @title = "notitle" 287 | end 288 | 289 | def plot_args (io = "") 290 | 291 | # Order of these is important or gnuplot barfs on 'em 292 | 293 | io << ( (@data.instance_of? String) ? @data : "'-'" ) 294 | 295 | io << " index #{@index}" if @index 296 | 297 | io << " using #{@using}" if @using 298 | 299 | io << " axes #{@axes}" if @axes 300 | 301 | io << case @title 302 | when /notitle/ then " notitle" 303 | when nil then "" 304 | else " title '#{@title}'" 305 | end 306 | 307 | io << " matrix" if @matrix 308 | io << " smooth #{@smooth}" if @smooth 309 | io << " with #{@with}" if @with 310 | io << " linecolor #{@linecolor}" if @linecolor 311 | io << " linewidth #{@linewidth}" if @linewidth 312 | io << " linestyle #{@linestyle.index}" if @linestyle 313 | io 314 | end 315 | 316 | def to_gplot 317 | case @data 318 | when nil then nil 319 | when String then nil 320 | else @data.to_gplot 321 | end 322 | end 323 | 324 | def to_gsplot 325 | case @data 326 | when nil then nil 327 | when String then nil 328 | else @data.to_gsplot 329 | end 330 | end 331 | 332 | end 333 | end 334 | 335 | class Array 336 | def to_gplot 337 | return "" if self.empty? 338 | 339 | case self[0] 340 | when Array 341 | tmp = self[0].zip( *self[1..-1] ) 342 | tmp.collect { |a| a.join(" ") }.join("\n") + "\ne" 343 | when Numeric 344 | self.join("\n") 345 | else 346 | self[0].zip( *self[1..-1] ).to_gplot 347 | end 348 | end 349 | 350 | def to_gsplot 351 | f = "" 352 | 353 | if ( self[0].kind_of? Array ) then 354 | x = self[0] 355 | y = self[1] 356 | d = self[2] 357 | 358 | x.each_with_index do |xv, i| 359 | y.each_with_index do |yv, j| 360 | f << [ xv, yv, d[i][j] ].join(" ") << "\n" 361 | end 362 | # f << "\n" 363 | end 364 | elsif ( self[0].kind_of? Numeric ) then 365 | self.length.times do |i| f << "#{self[i]}\n" end 366 | else 367 | self[0].zip( *self[1..-1] ).to_gsplot 368 | end 369 | 370 | f 371 | end 372 | end 373 | 374 | class Matrix 375 | def to_gplot (x = nil, y = nil) 376 | xgrid = x || (0...self.column_size).to_a 377 | ygrid = y || (0...self.row_size).to_a 378 | 379 | f = "" 380 | ygrid.length.times do |j| 381 | y = ygrid[j] 382 | xgrid.length.times do |i| 383 | if ( self[j,i] ) then 384 | f << "#{xgrid[i]} #{y} #{self[j,i]}\n" 385 | end 386 | end 387 | end 388 | 389 | f 390 | end 391 | 392 | end 393 | -------------------------------------------------------------------------------- /.rubocop_todo.yml: -------------------------------------------------------------------------------- 1 | # This configuration was generated by 2 | # `rubocop --auto-gen-config` 3 | # on 2019-11-26 16:32:38 +0000 using RuboCop version 0.73.0. 4 | # The point is for the user to remove these configuration records 5 | # one by one as the offenses are removed from the code base. 6 | # Note that changes in the inspected code, or installation of new 7 | # versions of RuboCop, may require this file to be generated again. 8 | 9 | # Offense count: 2 10 | # Cop supports --auto-correct. 11 | # Configuration parameters: EnforcedStyle, IndentationWidth. 12 | # SupportedStyles: with_first_argument, with_fixed_indentation 13 | Layout/AlignArguments: 14 | Exclude: 15 | - 'lib/gnuplot.rb' 16 | - 'test/test_gnuplot.rb' 17 | 18 | # Offense count: 1 19 | # Cop supports --auto-correct. 20 | Layout/AlignArray: 21 | Exclude: 22 | - 'test/test_gnuplot.rb' 23 | 24 | # Offense count: 1 25 | # Cop supports --auto-correct. 26 | Layout/EmptyLineAfterGuardClause: 27 | Exclude: 28 | - 'lib/gnuplot.rb' 29 | 30 | # Offense count: 1 31 | # Cop supports --auto-correct. 32 | Layout/EmptyLineAfterMagicComment: 33 | Exclude: 34 | - 'ruby_gnuplot.gemspec' 35 | 36 | # Offense count: 2 37 | # Cop supports --auto-correct. 38 | # Configuration parameters: AllowAdjacentOneLineDefs, NumberOfEmptyLines. 39 | Layout/EmptyLineBetweenDefs: 40 | Exclude: 41 | - 'lib/gnuplot.rb' 42 | - 'test/test_gnuplot.rb' 43 | 44 | # Offense count: 12 45 | # Cop supports --auto-correct. 46 | Layout/EmptyLines: 47 | Exclude: 48 | - 'lib/gnuplot.rb' 49 | - 'test/test_gnuplot.rb' 50 | 51 | # Offense count: 10 52 | # Cop supports --auto-correct. 53 | # Configuration parameters: EnforcedStyle. 54 | # SupportedStyles: empty_lines, no_empty_lines 55 | Layout/EmptyLinesAroundBlockBody: 56 | Exclude: 57 | - 'examples/multiple_data_sets.rb' 58 | - 'test/arrtest.rb' 59 | - 'test/multtest.rb' 60 | - 'test/sinwave.rb' 61 | 62 | # Offense count: 11 63 | # Cop supports --auto-correct. 64 | # Configuration parameters: EnforcedStyle. 65 | # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only 66 | Layout/EmptyLinesAroundClassBody: 67 | Exclude: 68 | - 'lib/gnuplot.rb' 69 | - 'test/test_gnuplot.rb' 70 | 71 | # Offense count: 2 72 | # Cop supports --auto-correct. 73 | Layout/EmptyLinesAroundMethodBody: 74 | Exclude: 75 | - 'lib/gnuplot.rb' 76 | - 'test/test_gnuplot.rb' 77 | 78 | # Offense count: 1 79 | # Cop supports --auto-correct. 80 | # Configuration parameters: EnforcedStyle. 81 | # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines 82 | Layout/EmptyLinesAroundModuleBody: 83 | Exclude: 84 | - 'lib/gnuplot.rb' 85 | 86 | # Offense count: 1 87 | # Cop supports --auto-correct. 88 | # Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment. 89 | Layout/ExtraSpacing: 90 | Exclude: 91 | - 'test/test_gnuplot.rb' 92 | 93 | # Offense count: 1 94 | # Cop supports --auto-correct. 95 | # Configuration parameters: IndentationWidth. 96 | Layout/IndentAssignment: 97 | Exclude: 98 | - 'lib/gnuplot.rb' 99 | 100 | # Offense count: 2 101 | # Cop supports --auto-correct. 102 | # Configuration parameters: EnforcedStyle. 103 | # SupportedStyles: normal, indented_internal_methods 104 | Layout/IndentationConsistency: 105 | Exclude: 106 | - 'examples/multiple_data_sets.rb' 107 | - 'lib/gnuplot.rb' 108 | 109 | # Offense count: 5 110 | # Cop supports --auto-correct. 111 | # Configuration parameters: Width, IgnoredPatterns. 112 | Layout/IndentationWidth: 113 | Exclude: 114 | - 'examples/3d_surface_plot.rb' 115 | - 'lib/gnuplot.rb' 116 | 117 | # Offense count: 2 118 | # Cop supports --auto-correct. 119 | Layout/SpaceAfterComma: 120 | Exclude: 121 | - 'lib/gnuplot.rb' 122 | 123 | # Offense count: 13 124 | # Cop supports --auto-correct. 125 | Layout/SpaceAfterMethodName: 126 | Exclude: 127 | - 'lib/gnuplot.rb' 128 | 129 | # Offense count: 1 130 | # Cop supports --auto-correct. 131 | # Configuration parameters: EnforcedStyle. 132 | # SupportedStyles: space, no_space 133 | Layout/SpaceAroundEqualsInParameterDefault: 134 | Exclude: 135 | - 'lib/gnuplot.rb' 136 | 137 | # Offense count: 6 138 | # Cop supports --auto-correct. 139 | # Configuration parameters: AllowForAlignment. 140 | Layout/SpaceAroundOperators: 141 | Exclude: 142 | - 'examples/discrete_points.rb' 143 | - 'examples/multiple_data_sets.rb' 144 | - 'ruby_gnuplot.gemspec' 145 | - 'test/arrtest.rb' 146 | - 'test/histtest.rb' 147 | - 'test/multtest.rb' 148 | 149 | # Offense count: 4 150 | # Cop supports --auto-correct. 151 | # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces. 152 | # SupportedStyles: space, no_space 153 | # SupportedStylesForEmptyBraces: space, no_space 154 | Layout/SpaceBeforeBlockBraces: 155 | Exclude: 156 | - 'examples/histogram.rb' 157 | - 'lib/gnuplot.rb' 158 | 159 | # Offense count: 18 160 | # Cop supports --auto-correct. 161 | # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBrackets. 162 | # SupportedStyles: space, no_space, compact 163 | # SupportedStylesForEmptyBrackets: space, no_space 164 | Layout/SpaceInsideArrayLiteralBrackets: 165 | Exclude: 166 | - 'lib/gnuplot.rb' 167 | - 'test/test_gnuplot.rb' 168 | 169 | # Offense count: 1 170 | # Cop supports --auto-correct. 171 | Layout/SpaceInsideArrayPercentLiteral: 172 | Exclude: 173 | - 'examples/histogram.rb' 174 | 175 | # Offense count: 7 176 | # Cop supports --auto-correct. 177 | # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. 178 | # SupportedStyles: space, no_space 179 | # SupportedStylesForEmptyBraces: space, no_space 180 | Layout/SpaceInsideBlockBraces: 181 | Exclude: 182 | - 'examples/histogram.rb' 183 | - 'lib/gnuplot.rb' 184 | 185 | # Offense count: 120 186 | # Cop supports --auto-correct. 187 | # Configuration parameters: EnforcedStyle. 188 | # SupportedStyles: space, no_space 189 | Layout/SpaceInsideParens: 190 | Enabled: false 191 | 192 | # Offense count: 6 193 | # Cop supports --auto-correct. 194 | # Configuration parameters: IndentationWidth. 195 | Layout/Tab: 196 | Exclude: 197 | - 'examples/3d_surface_plot.rb' 198 | - 'examples/multiple_data_sets.rb' 199 | - 'lib/gnuplot.rb' 200 | - 'test/test_gnuplot.rb' 201 | 202 | # Offense count: 7 203 | # Cop supports --auto-correct. 204 | # Configuration parameters: EnforcedStyle. 205 | # SupportedStyles: final_newline, final_blank_line 206 | Layout/TrailingBlankLines: 207 | Exclude: 208 | - 'examples/histogram.rb' 209 | - 'examples/sin_wave.rb' 210 | - 'test/arrtest.rb' 211 | - 'test/histtest.rb' 212 | - 'test/multtest.rb' 213 | - 'test/sinwave.rb' 214 | - 'test/test_gnuplot.rb' 215 | 216 | # Offense count: 27 217 | # Cop supports --auto-correct. 218 | # Configuration parameters: AllowInHeredoc. 219 | Layout/TrailingWhitespace: 220 | Exclude: 221 | - 'examples/discrete_points.rb' 222 | - 'examples/histogram.rb' 223 | - 'examples/multiple_data_sets.rb' 224 | - 'examples/output_image_file.rb' 225 | - 'examples/sin_wave.rb' 226 | 227 | # Offense count: 1 228 | Lint/AmbiguousOperator: 229 | Exclude: 230 | - 'lib/gnuplot.rb' 231 | 232 | # Offense count: 2 233 | Lint/ShadowingOuterLocalVariable: 234 | Exclude: 235 | - 'test/test_gnuplot.rb' 236 | 237 | # Offense count: 1 238 | # Cop supports --auto-correct. 239 | # Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. 240 | Lint/UnusedBlockArgument: 241 | Exclude: 242 | - 'test/histtest.rb' 243 | 244 | # Offense count: 1 245 | Lint/UselessAssignment: 246 | Exclude: 247 | - 'test/test_gnuplot.rb' 248 | 249 | # Offense count: 3 250 | Metrics/AbcSize: 251 | Max: 23 252 | 253 | # Offense count: 9 254 | # Configuration parameters: CountComments, ExcludedMethods. 255 | # ExcludedMethods: refine 256 | Metrics/BlockLength: 257 | Max: 143 258 | 259 | # Offense count: 1 260 | Metrics/CyclomaticComplexity: 261 | Max: 13 262 | 263 | # Offense count: 8 264 | # Configuration parameters: CountComments, ExcludedMethods. 265 | Metrics/MethodLength: 266 | Max: 22 267 | 268 | # Offense count: 1 269 | Metrics/PerceivedComplexity: 270 | Max: 12 271 | 272 | # Offense count: 1 273 | # Configuration parameters: EnforcedStyleForLeadingUnderscores. 274 | # SupportedStylesForLeadingUnderscores: disallowed, required, optional 275 | Naming/MemoizedInstanceVariableName: 276 | Exclude: 277 | - 'Rakefile' 278 | 279 | # Offense count: 4 280 | # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. 281 | # AllowedNames: io, id, to, by, on, in, at, ip, db 282 | Naming/UncommunicativeMethodParamName: 283 | Exclude: 284 | - 'lib/gnuplot.rb' 285 | 286 | # Offense count: 1 287 | # Configuration parameters: EnforcedStyle. 288 | # SupportedStyles: snake_case, camelCase 289 | Naming/VariableName: 290 | Exclude: 291 | - 'lib/gnuplot.rb' 292 | 293 | # Offense count: 1 294 | Security/Eval: 295 | Exclude: 296 | - 'Rakefile' 297 | 298 | # Offense count: 16 299 | # Cop supports --auto-correct. 300 | # Configuration parameters: EnforcedStyle. 301 | # SupportedStyles: prefer_alias, prefer_alias_method 302 | Style/Alias: 303 | Exclude: 304 | - 'lib/gnuplot.rb' 305 | 306 | # Offense count: 1 307 | # Cop supports --auto-correct. 308 | # Configuration parameters: EnforcedStyle. 309 | # SupportedStyles: always, conditionals 310 | Style/AndOr: 311 | Exclude: 312 | - 'lib/gnuplot.rb' 313 | 314 | # Offense count: 6 315 | # Cop supports --auto-correct. 316 | # Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners. 317 | # SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces 318 | # ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object 319 | # FunctionalMethods: let, let!, subject, watch 320 | # IgnoredMethods: lambda, proc, it 321 | Style/BlockDelimiters: 322 | Exclude: 323 | - 'examples/multiple_data_sets.rb' 324 | - 'lib/gnuplot.rb' 325 | - 'test/multtest.rb' 326 | 327 | # Offense count: 2 328 | # Cop supports --auto-correct. 329 | # Configuration parameters: EnforcedStyle. 330 | # SupportedStyles: is_a?, kind_of? 331 | Style/ClassCheck: 332 | Exclude: 333 | - 'lib/gnuplot.rb' 334 | 335 | # Offense count: 5 336 | # Cop supports --auto-correct. 337 | Style/ClassMethods: 338 | Exclude: 339 | - 'lib/gnuplot.rb' 340 | 341 | # Offense count: 9 342 | # Cop supports --auto-correct. 343 | Style/ColonMethodCall: 344 | Exclude: 345 | - 'lib/gnuplot.rb' 346 | - 'test/test_gnuplot.rb' 347 | 348 | # Offense count: 1 349 | # Cop supports --auto-correct. 350 | # Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions. 351 | # SupportedStyles: assign_to_condition, assign_inside_condition 352 | Style/ConditionalAssignment: 353 | Exclude: 354 | - 'lib/gnuplot.rb' 355 | 356 | # Offense count: 7 357 | Style/Documentation: 358 | Exclude: 359 | - 'spec/**/*' 360 | - 'test/**/*' 361 | - 'lib/gnuplot.rb' 362 | 363 | # Offense count: 1 364 | # Cop supports --auto-correct. 365 | Style/Encoding: 366 | Exclude: 367 | - 'ruby_gnuplot.gemspec' 368 | 369 | # Offense count: 9 370 | # Cop supports --auto-correct. 371 | Style/ExpandPathArguments: 372 | Exclude: 373 | - 'Rakefile' 374 | - 'examples/3d_surface_plot.rb' 375 | - 'examples/discrete_points.rb' 376 | - 'examples/histogram.rb' 377 | - 'examples/multiple_data_sets.rb' 378 | - 'examples/output_image_file.rb' 379 | - 'examples/sin_wave.rb' 380 | - 'ruby_gnuplot.gemspec' 381 | 382 | # Offense count: 1 383 | # Cop supports --auto-correct. 384 | # Configuration parameters: EnforcedStyle. 385 | # SupportedStyles: each, for 386 | Style/For: 387 | Exclude: 388 | - 'lib/gnuplot.rb' 389 | 390 | # Offense count: 23 391 | # Cop supports --auto-correct. 392 | # Configuration parameters: EnforcedStyle. 393 | # SupportedStyles: always, never 394 | Style/FrozenStringLiteralComment: 395 | Enabled: false 396 | 397 | # Offense count: 1 398 | # Configuration parameters: MinBodyLength. 399 | Style/GuardClause: 400 | Exclude: 401 | - 'lib/gnuplot.rb' 402 | 403 | # Offense count: 1 404 | # Cop supports --auto-correct. 405 | # Configuration parameters: UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. 406 | # SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys 407 | Style/HashSyntax: 408 | EnforcedStyle: hash_rockets 409 | 410 | # Offense count: 3 411 | # Cop supports --auto-correct. 412 | Style/IfUnlessModifier: 413 | Exclude: 414 | - 'lib/gnuplot.rb' 415 | 416 | # Offense count: 1 417 | Style/IfUnlessModifierOfIfUnless: 418 | Exclude: 419 | - 'lib/gnuplot.rb' 420 | 421 | # Offense count: 1 422 | # Cop supports --auto-correct. 423 | # Configuration parameters: IgnoredMethods. 424 | Style/MethodCallWithoutArgsParentheses: 425 | Exclude: 426 | - 'test/histtest.rb' 427 | 428 | # Offense count: 2 429 | # Cop supports --auto-correct. 430 | # Configuration parameters: EnforcedStyle. 431 | # SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline 432 | Style/MethodDefParentheses: 433 | Exclude: 434 | - 'lib/gnuplot.rb' 435 | 436 | # Offense count: 1 437 | Style/MethodMissingSuper: 438 | Exclude: 439 | - 'lib/gnuplot.rb' 440 | 441 | # Offense count: 1 442 | Style/MissingRespondToMissing: 443 | Exclude: 444 | - 'lib/gnuplot.rb' 445 | 446 | # Offense count: 3 447 | # Cop supports --auto-correct. 448 | Style/MultilineIfThen: 449 | Exclude: 450 | - 'lib/gnuplot.rb' 451 | 452 | # Offense count: 3 453 | # Cop supports --auto-correct. 454 | # Configuration parameters: EnforcedStyle. 455 | # SupportedStyles: literals, strict 456 | Style/MutableConstant: 457 | Exclude: 458 | - 'lib/gnuplot.rb' 459 | - 'lib/ruby_gnuplot/version.rb' 460 | 461 | # Offense count: 1 462 | # Cop supports --auto-correct. 463 | # Configuration parameters: EnforcedStyle. 464 | # SupportedStyles: both, prefix, postfix 465 | Style/NegatedIf: 466 | Exclude: 467 | - 'lib/gnuplot.rb' 468 | 469 | # Offense count: 1 470 | # Cop supports --auto-correct. 471 | Style/NestedModifier: 472 | Exclude: 473 | - 'lib/gnuplot.rb' 474 | 475 | # Offense count: 1 476 | # Cop supports --auto-correct. 477 | Style/Not: 478 | Exclude: 479 | - 'lib/gnuplot.rb' 480 | 481 | # Offense count: 18 482 | # Cop supports --auto-correct. 483 | # Configuration parameters: Strict. 484 | Style/NumericLiterals: 485 | MinDigits: 7 486 | 487 | # Offense count: 1 488 | # Cop supports --auto-correct. 489 | # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods. 490 | # SupportedStyles: predicate, comparison 491 | Style/NumericPredicate: 492 | Exclude: 493 | - 'lib/gnuplot.rb' 494 | 495 | # Offense count: 3 496 | # Cop supports --auto-correct. 497 | # Configuration parameters: AllowSafeAssignment, AllowInMultilineConditions. 498 | Style/ParenthesesAroundCondition: 499 | Exclude: 500 | - 'lib/gnuplot.rb' 501 | 502 | # Offense count: 1 503 | # Cop supports --auto-correct. 504 | # Configuration parameters: PreferredDelimiters. 505 | Style/PercentLiteralDelimiters: 506 | Exclude: 507 | - 'examples/histogram.rb' 508 | 509 | # Offense count: 3 510 | # Cop supports --auto-correct. 511 | # Configuration parameters: AllowMultipleReturnValues. 512 | Style/RedundantReturn: 513 | Exclude: 514 | - 'lib/gnuplot.rb' 515 | 516 | # Offense count: 5 517 | # Cop supports --auto-correct. 518 | Style/RedundantSelf: 519 | Exclude: 520 | - 'lib/gnuplot.rb' 521 | 522 | # Offense count: 1 523 | # Cop supports --auto-correct. 524 | # Configuration parameters: EnforcedStyle. 525 | # SupportedStyles: use_perl_names, use_english_names 526 | Style/SpecialGlobalVars: 527 | Exclude: 528 | - 'ruby_gnuplot.gemspec' 529 | 530 | # Offense count: 1 531 | # Cop supports --auto-correct. 532 | Style/StderrPuts: 533 | Exclude: 534 | - 'lib/gnuplot.rb' 535 | 536 | # Offense count: 235 537 | # Cop supports --auto-correct. 538 | # Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline. 539 | # SupportedStyles: single_quotes, double_quotes 540 | Style/StringLiterals: 541 | Enabled: false 542 | 543 | # Offense count: 1 544 | # Cop supports --auto-correct. 545 | # Configuration parameters: MinSize. 546 | # SupportedStyles: percent, brackets 547 | Style/SymbolArray: 548 | EnforcedStyle: brackets 549 | 550 | # Offense count: 7 551 | # Cop supports --auto-correct. 552 | # Configuration parameters: IgnoredMethods. 553 | # IgnoredMethods: respond_to, define_method 554 | Style/SymbolProc: 555 | Exclude: 556 | - 'examples/discrete_points.rb' 557 | - 'examples/histogram.rb' 558 | - 'examples/multiple_data_sets.rb' 559 | - 'lib/gnuplot.rb' 560 | - 'test/arrtest.rb' 561 | - 'test/multtest.rb' 562 | 563 | # Offense count: 1 564 | # Cop supports --auto-correct. 565 | # Configuration parameters: EnforcedStyle, AllowSafeAssignment. 566 | # SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex 567 | Style/TernaryParentheses: 568 | Exclude: 569 | - 'lib/gnuplot.rb' 570 | 571 | # Offense count: 1 572 | # Cop supports --auto-correct. 573 | # Configuration parameters: EnforcedStyleForMultiline. 574 | # SupportedStylesForMultiline: comma, consistent_comma, no_comma 575 | Style/TrailingCommaInArrayLiteral: 576 | Exclude: 577 | - 'examples/histogram.rb' 578 | 579 | # Offense count: 1 580 | # Cop supports --auto-correct. 581 | # Configuration parameters: WordRegex. 582 | # SupportedStyles: percent, brackets 583 | Style/WordArray: 584 | EnforcedStyle: percent 585 | MinSize: 10 586 | 587 | # Offense count: 3 588 | # Cop supports --auto-correct. 589 | # Configuration parameters: EnforcedStyle. 590 | # SupportedStyles: forbid_for_all_comparison_operators, forbid_for_equality_operators_only, require_for_all_comparison_operators, require_for_equality_operators_only 591 | Style/YodaCondition: 592 | Exclude: 593 | - 'test/test_gnuplot.rb' 594 | 595 | # Offense count: 1 596 | # Cop supports --auto-correct. 597 | Style/ZeroLengthPredicate: 598 | Exclude: 599 | - 'lib/gnuplot.rb' 600 | 601 | # Offense count: 9 602 | # Cop supports --auto-correct. 603 | # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. 604 | # URISchemes: http, https 605 | Metrics/LineLength: 606 | Max: 115 607 | -------------------------------------------------------------------------------- /spec/fixtures/plots/array_plot.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-2.0 EPSF-2.0 2 | %%Title: spec/tmp/array_plot.eps 3 | %%Creator: gnuplot 5.0 patchlevel 5 4 | %%CreationDate: Wed Nov 6 21:24:07 2019 5 | %%DocumentFonts: (atend) 6 | %%BoundingBox: 50 50 410 302 7 | %%EndComments 8 | %%BeginProlog 9 | /gnudict 256 dict def 10 | gnudict begin 11 | % 12 | % The following true/false flags may be edited by hand if desired. 13 | % The unit line width and grayscale image gamma correction may also be changed. 14 | % 15 | /Color false def 16 | /Blacktext false def 17 | /Solid false def 18 | /Dashlength 1 def 19 | /Landscape false def 20 | /Level1 false def 21 | /Level3 false def 22 | /Rounded false def 23 | /ClipToBoundingBox false def 24 | /SuppressPDFMark false def 25 | /TransparentPatterns false def 26 | /gnulinewidth 5.000 def 27 | /userlinewidth gnulinewidth def 28 | /Gamma 1.0 def 29 | /BackgroundColor {-1.000 -1.000 -1.000} def 30 | % 31 | /vshift -46 def 32 | /dl1 { 33 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 34 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if 35 | } def 36 | /dl2 { 37 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 38 | Rounded { currentlinewidth 0.75 mul add } if 39 | } def 40 | /hpt_ 31.5 def 41 | /vpt_ 31.5 def 42 | /hpt hpt_ def 43 | /vpt vpt_ def 44 | /doclip { 45 | ClipToBoundingBox { 46 | newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath 47 | clip 48 | } if 49 | } def 50 | % 51 | % Gnuplot Prolog Version 5.1 (Oct 2015) 52 | % 53 | %/SuppressPDFMark true def 54 | % 55 | /M {moveto} bind def 56 | /L {lineto} bind def 57 | /R {rmoveto} bind def 58 | /V {rlineto} bind def 59 | /N {newpath moveto} bind def 60 | /Z {closepath} bind def 61 | /C {setrgbcolor} bind def 62 | /f {rlineto fill} bind def 63 | /g {setgray} bind def 64 | /Gshow {show} def % May be redefined later in the file to support UTF-8 65 | /vpt2 vpt 2 mul def 66 | /hpt2 hpt 2 mul def 67 | /Lshow {currentpoint stroke M 0 vshift R 68 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 69 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R 70 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 71 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 72 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 73 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def 74 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def 75 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} 76 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def 77 | /BL {stroke userlinewidth 2 mul setlinewidth 78 | Rounded {1 setlinejoin 1 setlinecap} if} def 79 | /AL {stroke userlinewidth 2 div setlinewidth 80 | Rounded {1 setlinejoin 1 setlinecap} if} def 81 | /UL {dup gnulinewidth mul /userlinewidth exch def 82 | dup 1 lt {pop 1} if 10 mul /udl exch def} def 83 | /PL {stroke userlinewidth setlinewidth 84 | Rounded {1 setlinejoin 1 setlinecap} if} def 85 | 3.8 setmiterlimit 86 | % Classic Line colors (version 5.0) 87 | /LCw {1 1 1} def 88 | /LCb {0 0 0} def 89 | /LCa {0 0 0} def 90 | /LC0 {1 0 0} def 91 | /LC1 {0 1 0} def 92 | /LC2 {0 0 1} def 93 | /LC3 {1 0 1} def 94 | /LC4 {0 1 1} def 95 | /LC5 {1 1 0} def 96 | /LC6 {0 0 0} def 97 | /LC7 {1 0.3 0} def 98 | /LC8 {0.5 0.5 0.5} def 99 | % Default dash patterns (version 5.0) 100 | /LTB {BL [] LCb DL} def 101 | /LTw {PL [] 1 setgray} def 102 | /LTb {PL [] LCb DL} def 103 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def 104 | /LT0 {PL [] LC0 DL} def 105 | /LT1 {PL [2 dl1 3 dl2] LC1 DL} def 106 | /LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def 107 | /LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def 108 | /LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def 109 | /LT5 {PL [4 dl1 2 dl2] LC5 DL} def 110 | /LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def 111 | /LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def 112 | /LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def 113 | /SL {[] 0 setdash} def 114 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def 115 | /Dia {stroke [] 0 setdash 2 copy vpt add M 116 | hpt neg vpt neg V hpt vpt neg V 117 | hpt vpt V hpt neg vpt V closepath stroke 118 | Pnt} def 119 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V 120 | currentpoint stroke M 121 | hpt neg vpt neg R hpt2 0 V stroke 122 | } def 123 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 124 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 125 | hpt2 neg 0 V closepath stroke 126 | Pnt} def 127 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M 128 | hpt2 vpt2 neg V currentpoint stroke M 129 | hpt2 neg 0 R hpt2 vpt2 V stroke} def 130 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M 131 | hpt neg vpt -1.62 mul V 132 | hpt 2 mul 0 V 133 | hpt neg vpt 1.62 mul V closepath stroke 134 | Pnt} def 135 | /Star {2 copy Pls Crs} def 136 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M 137 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 138 | hpt2 neg 0 V closepath fill} def 139 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M 140 | hpt neg vpt -1.62 mul V 141 | hpt 2 mul 0 V 142 | hpt neg vpt 1.62 mul V closepath fill} def 143 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M 144 | hpt neg vpt 1.62 mul V 145 | hpt 2 mul 0 V 146 | hpt neg vpt -1.62 mul V closepath stroke 147 | Pnt} def 148 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M 149 | hpt neg vpt 1.62 mul V 150 | hpt 2 mul 0 V 151 | hpt neg vpt -1.62 mul V closepath fill} def 152 | /DiaF {stroke [] 0 setdash vpt add M 153 | hpt neg vpt neg V hpt vpt neg V 154 | hpt vpt V hpt neg vpt V closepath fill} def 155 | /Pent {stroke [] 0 setdash 2 copy gsave 156 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 157 | closepath stroke grestore Pnt} def 158 | /PentF {stroke [] 0 setdash gsave 159 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 160 | closepath fill grestore} def 161 | /Circle {stroke [] 0 setdash 2 copy 162 | hpt 0 360 arc stroke Pnt} def 163 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def 164 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def 165 | /C1 {BL [] 0 setdash 2 copy moveto 166 | 2 copy vpt 0 90 arc closepath fill 167 | vpt 0 360 arc closepath} bind def 168 | /C2 {BL [] 0 setdash 2 copy moveto 169 | 2 copy vpt 90 180 arc closepath fill 170 | vpt 0 360 arc closepath} bind def 171 | /C3 {BL [] 0 setdash 2 copy moveto 172 | 2 copy vpt 0 180 arc closepath fill 173 | vpt 0 360 arc closepath} bind def 174 | /C4 {BL [] 0 setdash 2 copy moveto 175 | 2 copy vpt 180 270 arc closepath fill 176 | vpt 0 360 arc closepath} bind def 177 | /C5 {BL [] 0 setdash 2 copy moveto 178 | 2 copy vpt 0 90 arc 179 | 2 copy moveto 180 | 2 copy vpt 180 270 arc closepath fill 181 | vpt 0 360 arc} bind def 182 | /C6 {BL [] 0 setdash 2 copy moveto 183 | 2 copy vpt 90 270 arc closepath fill 184 | vpt 0 360 arc closepath} bind def 185 | /C7 {BL [] 0 setdash 2 copy moveto 186 | 2 copy vpt 0 270 arc closepath fill 187 | vpt 0 360 arc closepath} bind def 188 | /C8 {BL [] 0 setdash 2 copy moveto 189 | 2 copy vpt 270 360 arc closepath fill 190 | vpt 0 360 arc closepath} bind def 191 | /C9 {BL [] 0 setdash 2 copy moveto 192 | 2 copy vpt 270 450 arc closepath fill 193 | vpt 0 360 arc closepath} bind def 194 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill 195 | 2 copy moveto 196 | 2 copy vpt 90 180 arc closepath fill 197 | vpt 0 360 arc closepath} bind def 198 | /C11 {BL [] 0 setdash 2 copy moveto 199 | 2 copy vpt 0 180 arc closepath fill 200 | 2 copy moveto 201 | 2 copy vpt 270 360 arc closepath fill 202 | vpt 0 360 arc closepath} bind def 203 | /C12 {BL [] 0 setdash 2 copy moveto 204 | 2 copy vpt 180 360 arc closepath fill 205 | vpt 0 360 arc closepath} bind def 206 | /C13 {BL [] 0 setdash 2 copy moveto 207 | 2 copy vpt 0 90 arc closepath fill 208 | 2 copy moveto 209 | 2 copy vpt 180 360 arc closepath fill 210 | vpt 0 360 arc closepath} bind def 211 | /C14 {BL [] 0 setdash 2 copy moveto 212 | 2 copy vpt 90 360 arc closepath fill 213 | vpt 0 360 arc} bind def 214 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill 215 | vpt 0 360 arc closepath} bind def 216 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto 217 | neg 0 rlineto closepath} bind def 218 | /Square {dup Rec} bind def 219 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def 220 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def 221 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def 222 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 223 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def 224 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 225 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill 226 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 227 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def 228 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill 229 | 2 copy vpt Square fill Bsquare} bind def 230 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def 231 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def 232 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill 233 | Bsquare} bind def 234 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill 235 | Bsquare} bind def 236 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def 237 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 238 | 2 copy vpt Square fill Bsquare} bind def 239 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 240 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 241 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def 242 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def 243 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def 244 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def 245 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def 246 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def 247 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def 248 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def 249 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def 250 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def 251 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def 252 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def 253 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def 254 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def 255 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def 256 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def 257 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def 258 | /DiaE {stroke [] 0 setdash vpt add M 259 | hpt neg vpt neg V hpt vpt neg V 260 | hpt vpt V hpt neg vpt V closepath stroke} def 261 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M 262 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 263 | hpt2 neg 0 V closepath stroke} def 264 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M 265 | hpt neg vpt -1.62 mul V 266 | hpt 2 mul 0 V 267 | hpt neg vpt 1.62 mul V closepath stroke} def 268 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M 269 | hpt neg vpt 1.62 mul V 270 | hpt 2 mul 0 V 271 | hpt neg vpt -1.62 mul V closepath stroke} def 272 | /PentE {stroke [] 0 setdash gsave 273 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 274 | closepath stroke grestore} def 275 | /CircE {stroke [] 0 setdash 276 | hpt 0 360 arc stroke} def 277 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def 278 | /DiaW {stroke [] 0 setdash vpt add M 279 | hpt neg vpt neg V hpt vpt neg V 280 | hpt vpt V hpt neg vpt V Opaque stroke} def 281 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M 282 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 283 | hpt2 neg 0 V Opaque stroke} def 284 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M 285 | hpt neg vpt -1.62 mul V 286 | hpt 2 mul 0 V 287 | hpt neg vpt 1.62 mul V Opaque stroke} def 288 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M 289 | hpt neg vpt 1.62 mul V 290 | hpt 2 mul 0 V 291 | hpt neg vpt -1.62 mul V Opaque stroke} def 292 | /PentW {stroke [] 0 setdash gsave 293 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 294 | Opaque stroke grestore} def 295 | /CircW {stroke [] 0 setdash 296 | hpt 0 360 arc Opaque stroke} def 297 | /BoxFill {gsave Rec 1 setgray fill grestore} def 298 | /Density { 299 | /Fillden exch def 300 | currentrgbcolor 301 | /ColB exch def /ColG exch def /ColR exch def 302 | /ColR ColR Fillden mul Fillden sub 1 add def 303 | /ColG ColG Fillden mul Fillden sub 1 add def 304 | /ColB ColB Fillden mul Fillden sub 1 add def 305 | ColR ColG ColB setrgbcolor} def 306 | /BoxColFill {gsave Rec PolyFill} def 307 | /PolyFill {gsave Density fill grestore grestore} def 308 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def 309 | % 310 | % PostScript Level 1 Pattern Fill routine for rectangles 311 | % Usage: x y w h s a XX PatternFill 312 | % x,y = lower left corner of box to be filled 313 | % w,h = width and height of box 314 | % a = angle in degrees between lines and x-axis 315 | % XX = 0/1 for no/yes cross-hatch 316 | % 317 | /PatternFill {gsave /PFa [ 9 2 roll ] def 318 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate 319 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec 320 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 321 | clip 322 | currentlinewidth 0.5 mul setlinewidth 323 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def 324 | 0 0 M PFa 5 get rotate PFs -2 div dup translate 325 | 0 1 PFs PFa 4 get div 1 add floor cvi 326 | {PFa 4 get mul 0 M 0 PFs V} for 327 | 0 PFa 6 get ne { 328 | 0 1 PFs PFa 4 get div 1 add floor cvi 329 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for 330 | } if 331 | stroke grestore} def 332 | % 333 | /languagelevel where 334 | {pop languagelevel} {1} ifelse 335 | dup 2 lt 336 | {/InterpretLevel1 true def 337 | /InterpretLevel3 false def} 338 | {/InterpretLevel1 Level1 def 339 | 2 gt 340 | {/InterpretLevel3 Level3 def} 341 | {/InterpretLevel3 false def} 342 | ifelse } 343 | ifelse 344 | % 345 | % PostScript level 2 pattern fill definitions 346 | % 347 | /Level2PatternFill { 348 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} 349 | bind def 350 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def 351 | << Tile8x8 352 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 353 | >> matrix makepattern 354 | /Pat1 exch def 355 | << Tile8x8 356 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke 357 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} 358 | >> matrix makepattern 359 | /Pat2 exch def 360 | << Tile8x8 361 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L 362 | 8 8 L 8 0 L 0 0 L fill} 363 | >> matrix makepattern 364 | /Pat3 exch def 365 | << Tile8x8 366 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L 367 | 0 12 M 12 0 L stroke} 368 | >> matrix makepattern 369 | /Pat4 exch def 370 | << Tile8x8 371 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L 372 | 0 -4 M 12 8 L stroke} 373 | >> matrix makepattern 374 | /Pat5 exch def 375 | << Tile8x8 376 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L 377 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} 378 | >> matrix makepattern 379 | /Pat6 exch def 380 | << Tile8x8 381 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L 382 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} 383 | >> matrix makepattern 384 | /Pat7 exch def 385 | << Tile8x8 386 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L 387 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} 388 | >> matrix makepattern 389 | /Pat8 exch def 390 | << Tile8x8 391 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L 392 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} 393 | >> matrix makepattern 394 | /Pat9 exch def 395 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def 396 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def 397 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def 398 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def 399 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def 400 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def 401 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def 402 | } def 403 | % 404 | % 405 | %End of PostScript Level 2 code 406 | % 407 | /PatternBgnd { 408 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 409 | } def 410 | % 411 | % Substitute for Level 2 pattern fill codes with 412 | % grayscale if Level 2 support is not selected. 413 | % 414 | /Level1PatternFill { 415 | /Pattern1 {0.250 Density} bind def 416 | /Pattern2 {0.500 Density} bind def 417 | /Pattern3 {0.750 Density} bind def 418 | /Pattern4 {0.125 Density} bind def 419 | /Pattern5 {0.375 Density} bind def 420 | /Pattern6 {0.625 Density} bind def 421 | /Pattern7 {0.875 Density} bind def 422 | } def 423 | % 424 | % Now test for support of Level 2 code 425 | % 426 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse 427 | % 428 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont 429 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall 430 | currentdict end definefont pop 431 | % 432 | /MFshow { 433 | { dup 5 get 3 ge 434 | { 5 get 3 eq {gsave} {grestore} ifelse } 435 | {dup dup 0 get findfont exch 1 get scalefont setfont 436 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 437 | get exch 4 get {textshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq 438 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 439 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div 440 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get 441 | textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop 442 | pop aload pop M} ifelse }ifelse }ifelse } 443 | ifelse } 444 | forall} def 445 | /Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def 446 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } 447 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont 448 | 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def 449 | /MLshow { currentpoint stroke M 450 | 0 exch R 451 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 452 | /MRshow { currentpoint stroke M 453 | exch dup MFwidth neg 3 -1 roll R 454 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 455 | /MCshow { currentpoint stroke M 456 | exch dup MFwidth -2 div 3 -1 roll R 457 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 458 | /XYsave { [( ) 1 2 true false 3 ()] } bind def 459 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def 460 | Level1 SuppressPDFMark or 461 | {} { 462 | /SDict 10 dict def 463 | systemdict /pdfmark known not { 464 | userdict /pdfmark systemdict /cleartomark get put 465 | } if 466 | SDict begin [ 467 | /Title (spec/tmp/array_plot.eps) 468 | /Subject (gnuplot plot) 469 | /Creator (gnuplot 5.0 patchlevel 5) 470 | % /Producer (gnuplot) 471 | % /Keywords () 472 | /CreationDate (Wed Nov 6 21:24:07 2019) 473 | /DOCINFO pdfmark 474 | end 475 | } ifelse 476 | % 477 | % Support for boxed text - Ethan A Merritt May 2005 478 | % 479 | /InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put 480 | userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put 481 | /Boxing true def } def 482 | /ExtendTextBox { Boxing 483 | { gsave dup false charpath pathbbox 484 | dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse 485 | dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse 486 | dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse 487 | dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse 488 | grestore } if } def 489 | /PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M 490 | TBx1 TBxmargin sub TBy2 TBymargin add L 491 | TBx2 TBxmargin add TBy2 TBymargin add L 492 | TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def 493 | /DrawTextBox { PopTextBox stroke /Boxing false def} def 494 | /FillTextBox { gsave PopTextBox 1 1 1 setrgbcolor fill grestore /Boxing false def} def 495 | 0 0 0 0 InitTextBox 496 | /TBxmargin 20 def 497 | /TBymargin 20 def 498 | /Boxing false def 499 | /textshow { ExtendTextBox Gshow } def 500 | % 501 | % redundant definitions for compatibility with prologue.ps older than 5.0.2 502 | /LTB {BL [] LCb DL} def 503 | /LTb {PL [] LCb DL} def 504 | end 505 | %%EndProlog 506 | %%Page: 1 1 507 | gnudict begin 508 | gsave 509 | doclip 510 | 50 50 translate 511 | 0.050 0.050 scale 512 | 0 setgray 513 | newpath 514 | (Helvetica) findfont 140 scalefont setfont 515 | BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if 516 | 1.000 UL 517 | LTb 518 | LCb setrgbcolor 519 | 770 588 M 520 | 63 0 V 521 | 6114 0 R 522 | -63 0 V 523 | stroke 524 | 686 588 M 525 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 526 | ] -46.7 MRshow 527 | 1.000 UL 528 | LTb 529 | LCb setrgbcolor 530 | 770 1394 M 531 | 63 0 V 532 | 6114 0 R 533 | -63 0 V 534 | stroke 535 | 686 1394 M 536 | [ [(Helvetica) 140.0 0.0 true true 0 ( 500)] 537 | ] -46.7 MRshow 538 | 1.000 UL 539 | LTb 540 | LCb setrgbcolor 541 | 770 2200 M 542 | 63 0 V 543 | 6114 0 R 544 | -63 0 V 545 | stroke 546 | 686 2200 M 547 | [ [(Helvetica) 140.0 0.0 true true 0 ( 1000)] 548 | ] -46.7 MRshow 549 | 1.000 UL 550 | LTb 551 | LCb setrgbcolor 552 | 770 3007 M 553 | 63 0 V 554 | 6114 0 R 555 | -63 0 V 556 | stroke 557 | 686 3007 M 558 | [ [(Helvetica) 140.0 0.0 true true 0 ( 1500)] 559 | ] -46.7 MRshow 560 | 1.000 UL 561 | LTb 562 | LCb setrgbcolor 563 | 770 3813 M 564 | 63 0 V 565 | 6114 0 R 566 | -63 0 V 567 | stroke 568 | 686 3813 M 569 | [ [(Helvetica) 140.0 0.0 true true 0 ( 2000)] 570 | ] -46.7 MRshow 571 | 1.000 UL 572 | LTb 573 | LCb setrgbcolor 574 | 770 4619 M 575 | 63 0 V 576 | 6114 0 R 577 | -63 0 V 578 | stroke 579 | 686 4619 M 580 | [ [(Helvetica) 140.0 0.0 true true 0 ( 2500)] 581 | ] -46.7 MRshow 582 | 1.000 UL 583 | LTb 584 | LCb setrgbcolor 585 | 770 588 M 586 | 0 63 V 587 | 0 3968 R 588 | 0 -63 V 589 | stroke 590 | 770 448 M 591 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 592 | ] -46.7 MCshow 593 | 1.000 UL 594 | LTb 595 | LCb setrgbcolor 596 | 2005 588 M 597 | 0 63 V 598 | 0 3968 R 599 | 0 -63 V 600 | stroke 601 | 2005 448 M 602 | [ [(Helvetica) 140.0 0.0 true true 0 ( 10)] 603 | ] -46.7 MCshow 604 | 1.000 UL 605 | LTb 606 | LCb setrgbcolor 607 | 3241 588 M 608 | 0 63 V 609 | 0 3968 R 610 | 0 -63 V 611 | stroke 612 | 3241 448 M 613 | [ [(Helvetica) 140.0 0.0 true true 0 ( 20)] 614 | ] -46.7 MCshow 615 | 1.000 UL 616 | LTb 617 | LCb setrgbcolor 618 | 4476 588 M 619 | 0 63 V 620 | 0 3968 R 621 | 0 -63 V 622 | stroke 623 | 4476 448 M 624 | [ [(Helvetica) 140.0 0.0 true true 0 ( 30)] 625 | ] -46.7 MCshow 626 | 1.000 UL 627 | LTb 628 | LCb setrgbcolor 629 | 5712 588 M 630 | 0 63 V 631 | 0 3968 R 632 | 0 -63 V 633 | stroke 634 | 5712 448 M 635 | [ [(Helvetica) 140.0 0.0 true true 0 ( 40)] 636 | ] -46.7 MCshow 637 | 1.000 UL 638 | LTb 639 | LCb setrgbcolor 640 | 6947 588 M 641 | 0 63 V 642 | 0 3968 R 643 | 0 -63 V 644 | stroke 645 | 6947 448 M 646 | [ [(Helvetica) 140.0 0.0 true true 0 ( 50)] 647 | ] -46.7 MCshow 648 | 1.000 UL 649 | LTb 650 | LCb setrgbcolor 651 | 1.000 UL 652 | LTB 653 | LCb setrgbcolor 654 | 770 4619 N 655 | 770 588 L 656 | 6177 0 V 657 | 0 4031 V 658 | -6177 0 V 659 | Z stroke 660 | 1.000 UP 661 | 1.000 UL 662 | LTb 663 | LCb setrgbcolor 664 | LCb setrgbcolor 665 | 112 2603 M 666 | currentpoint gsave translate -270 rotate 0 0 moveto 667 | [ [(Helvetica) 140.0 0.0 true true 0 (x)] 668 | ] -46.7 MCshow 669 | grestore 670 | LTb 671 | LCb setrgbcolor 672 | 3858 238 M 673 | [ [(Helvetica) 140.0 0.0 true true 0 (x)] 674 | [(Helvetica) 112.0 70.0 true true 0 (2)] 675 | ] -60.7 MCshow 676 | LTb 677 | LCb setrgbcolor 678 | 3858 4829 M 679 | [ [(Helvetica) 140.0 0.0 true true 0 (Array Plot Example)] 680 | ] -46.7 MCshow 681 | % Begin plot #1 682 | 1.000 UP 683 | 1.000 UL 684 | LTb 685 | LCb setrgbcolor 686 | 770 588 M 687 | 124 2 V 688 | 123 4 V 689 | 124 9 V 690 | 123 11 V 691 | 124 14 V 692 | 123 18 V 693 | 124 21 V 694 | 123 24 V 695 | 124 28 V 696 | 123 30 V 697 | 124 34 V 698 | 123 37 V 699 | 124 40 V 700 | 124 44 V 701 | 123 47 V 702 | 124 50 V 703 | 123 53 V 704 | 124 56 V 705 | 123 60 V 706 | 124 63 V 707 | 123 66 V 708 | 124 69 V 709 | 123 73 V 710 | 124 76 V 711 | 124 79 V 712 | 123 82 V 713 | 124 85 V 714 | 123 89 V 715 | 124 92 V 716 | 123 95 V 717 | 124 99 V 718 | 123 101 V 719 | 124 105 V 720 | 123 108 V 721 | 124 111 V 722 | 123 115 V 723 | 124 117 V 724 | 124 121 V 725 | 123 124 V 726 | 124 128 V 727 | 123 130 V 728 | 124 134 V 729 | 123 137 V 730 | 124 141 V 731 | 123 143 V 732 | 124 147 V 733 | 123 150 V 734 | 124 153 V 735 | 123 156 V 736 | 124 160 V 737 | 770 588 Pls 738 | 894 590 Pls 739 | 1017 594 Pls 740 | 1141 603 Pls 741 | 1264 614 Pls 742 | 1388 628 Pls 743 | 1511 646 Pls 744 | 1635 667 Pls 745 | 1758 691 Pls 746 | 1882 719 Pls 747 | 2005 749 Pls 748 | 2129 783 Pls 749 | 2252 820 Pls 750 | 2376 860 Pls 751 | 2500 904 Pls 752 | 2623 951 Pls 753 | 2747 1001 Pls 754 | 2870 1054 Pls 755 | 2994 1110 Pls 756 | 3117 1170 Pls 757 | 3241 1233 Pls 758 | 3364 1299 Pls 759 | 3488 1368 Pls 760 | 3611 1441 Pls 761 | 3735 1517 Pls 762 | 3859 1596 Pls 763 | 3982 1678 Pls 764 | 4106 1763 Pls 765 | 4229 1852 Pls 766 | 4353 1944 Pls 767 | 4476 2039 Pls 768 | 4600 2138 Pls 769 | 4723 2239 Pls 770 | 4847 2344 Pls 771 | 4970 2452 Pls 772 | 5094 2563 Pls 773 | 5217 2678 Pls 774 | 5341 2795 Pls 775 | 5465 2916 Pls 776 | 5588 3040 Pls 777 | 5712 3168 Pls 778 | 5835 3298 Pls 779 | 5959 3432 Pls 780 | 6082 3569 Pls 781 | 6206 3710 Pls 782 | 6329 3853 Pls 783 | 6453 4000 Pls 784 | 6576 4150 Pls 785 | 6700 4303 Pls 786 | 6823 4459 Pls 787 | 6947 4619 Pls 788 | % End plot #1 789 | 2.000 UL 790 | LTb 791 | LCb setrgbcolor 792 | 1.000 UL 793 | LTB 794 | LCb setrgbcolor 795 | 770 4619 N 796 | 770 588 L 797 | 6177 0 V 798 | 0 4031 V 799 | -6177 0 V 800 | Z stroke 801 | 1.000 UP 802 | 1.000 UL 803 | LTb 804 | LCb setrgbcolor 805 | stroke 806 | grestore 807 | end 808 | showpage 809 | %%Trailer 810 | %%DocumentFonts: Helvetica 811 | -------------------------------------------------------------------------------- /spec/fixtures/plots/multtest_plot.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-2.0 EPSF-2.0 2 | %%Title: spec/tmp/multtest_plot.eps 3 | %%Creator: gnuplot 5.0 patchlevel 5 4 | %%CreationDate: Fri Nov 22 22:28:48 2019 5 | %%DocumentFonts: (atend) 6 | %%BoundingBox: 50 50 410 302 7 | %%EndComments 8 | %%BeginProlog 9 | /gnudict 256 dict def 10 | gnudict begin 11 | % 12 | % The following true/false flags may be edited by hand if desired. 13 | % The unit line width and grayscale image gamma correction may also be changed. 14 | % 15 | /Color false def 16 | /Blacktext false def 17 | /Solid false def 18 | /Dashlength 1 def 19 | /Landscape false def 20 | /Level1 false def 21 | /Level3 false def 22 | /Rounded false def 23 | /ClipToBoundingBox false def 24 | /SuppressPDFMark false def 25 | /TransparentPatterns false def 26 | /gnulinewidth 5.000 def 27 | /userlinewidth gnulinewidth def 28 | /Gamma 1.0 def 29 | /BackgroundColor {-1.000 -1.000 -1.000} def 30 | % 31 | /vshift -46 def 32 | /dl1 { 33 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 34 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if 35 | } def 36 | /dl2 { 37 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 38 | Rounded { currentlinewidth 0.75 mul add } if 39 | } def 40 | /hpt_ 31.5 def 41 | /vpt_ 31.5 def 42 | /hpt hpt_ def 43 | /vpt vpt_ def 44 | /doclip { 45 | ClipToBoundingBox { 46 | newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath 47 | clip 48 | } if 49 | } def 50 | % 51 | % Gnuplot Prolog Version 5.1 (Oct 2015) 52 | % 53 | %/SuppressPDFMark true def 54 | % 55 | /M {moveto} bind def 56 | /L {lineto} bind def 57 | /R {rmoveto} bind def 58 | /V {rlineto} bind def 59 | /N {newpath moveto} bind def 60 | /Z {closepath} bind def 61 | /C {setrgbcolor} bind def 62 | /f {rlineto fill} bind def 63 | /g {setgray} bind def 64 | /Gshow {show} def % May be redefined later in the file to support UTF-8 65 | /vpt2 vpt 2 mul def 66 | /hpt2 hpt 2 mul def 67 | /Lshow {currentpoint stroke M 0 vshift R 68 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 69 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R 70 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 71 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 72 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 73 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def 74 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def 75 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} 76 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def 77 | /BL {stroke userlinewidth 2 mul setlinewidth 78 | Rounded {1 setlinejoin 1 setlinecap} if} def 79 | /AL {stroke userlinewidth 2 div setlinewidth 80 | Rounded {1 setlinejoin 1 setlinecap} if} def 81 | /UL {dup gnulinewidth mul /userlinewidth exch def 82 | dup 1 lt {pop 1} if 10 mul /udl exch def} def 83 | /PL {stroke userlinewidth setlinewidth 84 | Rounded {1 setlinejoin 1 setlinecap} if} def 85 | 3.8 setmiterlimit 86 | % Classic Line colors (version 5.0) 87 | /LCw {1 1 1} def 88 | /LCb {0 0 0} def 89 | /LCa {0 0 0} def 90 | /LC0 {1 0 0} def 91 | /LC1 {0 1 0} def 92 | /LC2 {0 0 1} def 93 | /LC3 {1 0 1} def 94 | /LC4 {0 1 1} def 95 | /LC5 {1 1 0} def 96 | /LC6 {0 0 0} def 97 | /LC7 {1 0.3 0} def 98 | /LC8 {0.5 0.5 0.5} def 99 | % Default dash patterns (version 5.0) 100 | /LTB {BL [] LCb DL} def 101 | /LTw {PL [] 1 setgray} def 102 | /LTb {PL [] LCb DL} def 103 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def 104 | /LT0 {PL [] LC0 DL} def 105 | /LT1 {PL [2 dl1 3 dl2] LC1 DL} def 106 | /LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def 107 | /LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def 108 | /LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def 109 | /LT5 {PL [4 dl1 2 dl2] LC5 DL} def 110 | /LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def 111 | /LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def 112 | /LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def 113 | /SL {[] 0 setdash} def 114 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def 115 | /Dia {stroke [] 0 setdash 2 copy vpt add M 116 | hpt neg vpt neg V hpt vpt neg V 117 | hpt vpt V hpt neg vpt V closepath stroke 118 | Pnt} def 119 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V 120 | currentpoint stroke M 121 | hpt neg vpt neg R hpt2 0 V stroke 122 | } def 123 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 124 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 125 | hpt2 neg 0 V closepath stroke 126 | Pnt} def 127 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M 128 | hpt2 vpt2 neg V currentpoint stroke M 129 | hpt2 neg 0 R hpt2 vpt2 V stroke} def 130 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M 131 | hpt neg vpt -1.62 mul V 132 | hpt 2 mul 0 V 133 | hpt neg vpt 1.62 mul V closepath stroke 134 | Pnt} def 135 | /Star {2 copy Pls Crs} def 136 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M 137 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 138 | hpt2 neg 0 V closepath fill} def 139 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M 140 | hpt neg vpt -1.62 mul V 141 | hpt 2 mul 0 V 142 | hpt neg vpt 1.62 mul V closepath fill} def 143 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M 144 | hpt neg vpt 1.62 mul V 145 | hpt 2 mul 0 V 146 | hpt neg vpt -1.62 mul V closepath stroke 147 | Pnt} def 148 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M 149 | hpt neg vpt 1.62 mul V 150 | hpt 2 mul 0 V 151 | hpt neg vpt -1.62 mul V closepath fill} def 152 | /DiaF {stroke [] 0 setdash vpt add M 153 | hpt neg vpt neg V hpt vpt neg V 154 | hpt vpt V hpt neg vpt V closepath fill} def 155 | /Pent {stroke [] 0 setdash 2 copy gsave 156 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 157 | closepath stroke grestore Pnt} def 158 | /PentF {stroke [] 0 setdash gsave 159 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 160 | closepath fill grestore} def 161 | /Circle {stroke [] 0 setdash 2 copy 162 | hpt 0 360 arc stroke Pnt} def 163 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def 164 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def 165 | /C1 {BL [] 0 setdash 2 copy moveto 166 | 2 copy vpt 0 90 arc closepath fill 167 | vpt 0 360 arc closepath} bind def 168 | /C2 {BL [] 0 setdash 2 copy moveto 169 | 2 copy vpt 90 180 arc closepath fill 170 | vpt 0 360 arc closepath} bind def 171 | /C3 {BL [] 0 setdash 2 copy moveto 172 | 2 copy vpt 0 180 arc closepath fill 173 | vpt 0 360 arc closepath} bind def 174 | /C4 {BL [] 0 setdash 2 copy moveto 175 | 2 copy vpt 180 270 arc closepath fill 176 | vpt 0 360 arc closepath} bind def 177 | /C5 {BL [] 0 setdash 2 copy moveto 178 | 2 copy vpt 0 90 arc 179 | 2 copy moveto 180 | 2 copy vpt 180 270 arc closepath fill 181 | vpt 0 360 arc} bind def 182 | /C6 {BL [] 0 setdash 2 copy moveto 183 | 2 copy vpt 90 270 arc closepath fill 184 | vpt 0 360 arc closepath} bind def 185 | /C7 {BL [] 0 setdash 2 copy moveto 186 | 2 copy vpt 0 270 arc closepath fill 187 | vpt 0 360 arc closepath} bind def 188 | /C8 {BL [] 0 setdash 2 copy moveto 189 | 2 copy vpt 270 360 arc closepath fill 190 | vpt 0 360 arc closepath} bind def 191 | /C9 {BL [] 0 setdash 2 copy moveto 192 | 2 copy vpt 270 450 arc closepath fill 193 | vpt 0 360 arc closepath} bind def 194 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill 195 | 2 copy moveto 196 | 2 copy vpt 90 180 arc closepath fill 197 | vpt 0 360 arc closepath} bind def 198 | /C11 {BL [] 0 setdash 2 copy moveto 199 | 2 copy vpt 0 180 arc closepath fill 200 | 2 copy moveto 201 | 2 copy vpt 270 360 arc closepath fill 202 | vpt 0 360 arc closepath} bind def 203 | /C12 {BL [] 0 setdash 2 copy moveto 204 | 2 copy vpt 180 360 arc closepath fill 205 | vpt 0 360 arc closepath} bind def 206 | /C13 {BL [] 0 setdash 2 copy moveto 207 | 2 copy vpt 0 90 arc closepath fill 208 | 2 copy moveto 209 | 2 copy vpt 180 360 arc closepath fill 210 | vpt 0 360 arc closepath} bind def 211 | /C14 {BL [] 0 setdash 2 copy moveto 212 | 2 copy vpt 90 360 arc closepath fill 213 | vpt 0 360 arc} bind def 214 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill 215 | vpt 0 360 arc closepath} bind def 216 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto 217 | neg 0 rlineto closepath} bind def 218 | /Square {dup Rec} bind def 219 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def 220 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def 221 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def 222 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 223 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def 224 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 225 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill 226 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 227 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def 228 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill 229 | 2 copy vpt Square fill Bsquare} bind def 230 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def 231 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def 232 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill 233 | Bsquare} bind def 234 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill 235 | Bsquare} bind def 236 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def 237 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 238 | 2 copy vpt Square fill Bsquare} bind def 239 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 240 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 241 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def 242 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def 243 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def 244 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def 245 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def 246 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def 247 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def 248 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def 249 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def 250 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def 251 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def 252 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def 253 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def 254 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def 255 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def 256 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def 257 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def 258 | /DiaE {stroke [] 0 setdash vpt add M 259 | hpt neg vpt neg V hpt vpt neg V 260 | hpt vpt V hpt neg vpt V closepath stroke} def 261 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M 262 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 263 | hpt2 neg 0 V closepath stroke} def 264 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M 265 | hpt neg vpt -1.62 mul V 266 | hpt 2 mul 0 V 267 | hpt neg vpt 1.62 mul V closepath stroke} def 268 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M 269 | hpt neg vpt 1.62 mul V 270 | hpt 2 mul 0 V 271 | hpt neg vpt -1.62 mul V closepath stroke} def 272 | /PentE {stroke [] 0 setdash gsave 273 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 274 | closepath stroke grestore} def 275 | /CircE {stroke [] 0 setdash 276 | hpt 0 360 arc stroke} def 277 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def 278 | /DiaW {stroke [] 0 setdash vpt add M 279 | hpt neg vpt neg V hpt vpt neg V 280 | hpt vpt V hpt neg vpt V Opaque stroke} def 281 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M 282 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 283 | hpt2 neg 0 V Opaque stroke} def 284 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M 285 | hpt neg vpt -1.62 mul V 286 | hpt 2 mul 0 V 287 | hpt neg vpt 1.62 mul V Opaque stroke} def 288 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M 289 | hpt neg vpt 1.62 mul V 290 | hpt 2 mul 0 V 291 | hpt neg vpt -1.62 mul V Opaque stroke} def 292 | /PentW {stroke [] 0 setdash gsave 293 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 294 | Opaque stroke grestore} def 295 | /CircW {stroke [] 0 setdash 296 | hpt 0 360 arc Opaque stroke} def 297 | /BoxFill {gsave Rec 1 setgray fill grestore} def 298 | /Density { 299 | /Fillden exch def 300 | currentrgbcolor 301 | /ColB exch def /ColG exch def /ColR exch def 302 | /ColR ColR Fillden mul Fillden sub 1 add def 303 | /ColG ColG Fillden mul Fillden sub 1 add def 304 | /ColB ColB Fillden mul Fillden sub 1 add def 305 | ColR ColG ColB setrgbcolor} def 306 | /BoxColFill {gsave Rec PolyFill} def 307 | /PolyFill {gsave Density fill grestore grestore} def 308 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def 309 | % 310 | % PostScript Level 1 Pattern Fill routine for rectangles 311 | % Usage: x y w h s a XX PatternFill 312 | % x,y = lower left corner of box to be filled 313 | % w,h = width and height of box 314 | % a = angle in degrees between lines and x-axis 315 | % XX = 0/1 for no/yes cross-hatch 316 | % 317 | /PatternFill {gsave /PFa [ 9 2 roll ] def 318 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate 319 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec 320 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 321 | clip 322 | currentlinewidth 0.5 mul setlinewidth 323 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def 324 | 0 0 M PFa 5 get rotate PFs -2 div dup translate 325 | 0 1 PFs PFa 4 get div 1 add floor cvi 326 | {PFa 4 get mul 0 M 0 PFs V} for 327 | 0 PFa 6 get ne { 328 | 0 1 PFs PFa 4 get div 1 add floor cvi 329 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for 330 | } if 331 | stroke grestore} def 332 | % 333 | /languagelevel where 334 | {pop languagelevel} {1} ifelse 335 | dup 2 lt 336 | {/InterpretLevel1 true def 337 | /InterpretLevel3 false def} 338 | {/InterpretLevel1 Level1 def 339 | 2 gt 340 | {/InterpretLevel3 Level3 def} 341 | {/InterpretLevel3 false def} 342 | ifelse } 343 | ifelse 344 | % 345 | % PostScript level 2 pattern fill definitions 346 | % 347 | /Level2PatternFill { 348 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} 349 | bind def 350 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def 351 | << Tile8x8 352 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 353 | >> matrix makepattern 354 | /Pat1 exch def 355 | << Tile8x8 356 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke 357 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} 358 | >> matrix makepattern 359 | /Pat2 exch def 360 | << Tile8x8 361 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L 362 | 8 8 L 8 0 L 0 0 L fill} 363 | >> matrix makepattern 364 | /Pat3 exch def 365 | << Tile8x8 366 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L 367 | 0 12 M 12 0 L stroke} 368 | >> matrix makepattern 369 | /Pat4 exch def 370 | << Tile8x8 371 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L 372 | 0 -4 M 12 8 L stroke} 373 | >> matrix makepattern 374 | /Pat5 exch def 375 | << Tile8x8 376 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L 377 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} 378 | >> matrix makepattern 379 | /Pat6 exch def 380 | << Tile8x8 381 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L 382 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} 383 | >> matrix makepattern 384 | /Pat7 exch def 385 | << Tile8x8 386 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L 387 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} 388 | >> matrix makepattern 389 | /Pat8 exch def 390 | << Tile8x8 391 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L 392 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} 393 | >> matrix makepattern 394 | /Pat9 exch def 395 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def 396 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def 397 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def 398 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def 399 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def 400 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def 401 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def 402 | } def 403 | % 404 | % 405 | %End of PostScript Level 2 code 406 | % 407 | /PatternBgnd { 408 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 409 | } def 410 | % 411 | % Substitute for Level 2 pattern fill codes with 412 | % grayscale if Level 2 support is not selected. 413 | % 414 | /Level1PatternFill { 415 | /Pattern1 {0.250 Density} bind def 416 | /Pattern2 {0.500 Density} bind def 417 | /Pattern3 {0.750 Density} bind def 418 | /Pattern4 {0.125 Density} bind def 419 | /Pattern5 {0.375 Density} bind def 420 | /Pattern6 {0.625 Density} bind def 421 | /Pattern7 {0.875 Density} bind def 422 | } def 423 | % 424 | % Now test for support of Level 2 code 425 | % 426 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse 427 | % 428 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont 429 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall 430 | currentdict end definefont pop 431 | % 432 | /MFshow { 433 | { dup 5 get 3 ge 434 | { 5 get 3 eq {gsave} {grestore} ifelse } 435 | {dup dup 0 get findfont exch 1 get scalefont setfont 436 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 437 | get exch 4 get {textshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq 438 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 439 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div 440 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get 441 | textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop 442 | pop aload pop M} ifelse }ifelse }ifelse } 443 | ifelse } 444 | forall} def 445 | /Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def 446 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } 447 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont 448 | 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def 449 | /MLshow { currentpoint stroke M 450 | 0 exch R 451 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 452 | /MRshow { currentpoint stroke M 453 | exch dup MFwidth neg 3 -1 roll R 454 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 455 | /MCshow { currentpoint stroke M 456 | exch dup MFwidth -2 div 3 -1 roll R 457 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 458 | /XYsave { [( ) 1 2 true false 3 ()] } bind def 459 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def 460 | Level1 SuppressPDFMark or 461 | {} { 462 | /SDict 10 dict def 463 | systemdict /pdfmark known not { 464 | userdict /pdfmark systemdict /cleartomark get put 465 | } if 466 | SDict begin [ 467 | /Title (spec/tmp/multtest_plot.eps) 468 | /Subject (gnuplot plot) 469 | /Creator (gnuplot 5.0 patchlevel 5) 470 | % /Producer (gnuplot) 471 | % /Keywords () 472 | /CreationDate (Fri Nov 22 22:28:48 2019) 473 | /DOCINFO pdfmark 474 | end 475 | } ifelse 476 | % 477 | % Support for boxed text - Ethan A Merritt May 2005 478 | % 479 | /InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put 480 | userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put 481 | /Boxing true def } def 482 | /ExtendTextBox { Boxing 483 | { gsave dup false charpath pathbbox 484 | dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse 485 | dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse 486 | dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse 487 | dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse 488 | grestore } if } def 489 | /PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M 490 | TBx1 TBxmargin sub TBy2 TBymargin add L 491 | TBx2 TBxmargin add TBy2 TBymargin add L 492 | TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def 493 | /DrawTextBox { PopTextBox stroke /Boxing false def} def 494 | /FillTextBox { gsave PopTextBox 1 1 1 setrgbcolor fill grestore /Boxing false def} def 495 | 0 0 0 0 InitTextBox 496 | /TBxmargin 20 def 497 | /TBymargin 20 def 498 | /Boxing false def 499 | /textshow { ExtendTextBox Gshow } def 500 | % 501 | % redundant definitions for compatibility with prologue.ps older than 5.0.2 502 | /LTB {BL [] LCb DL} def 503 | /LTb {PL [] LCb DL} def 504 | end 505 | %%EndProlog 506 | %%Page: 1 1 507 | gnudict begin 508 | gsave 509 | doclip 510 | 50 50 translate 511 | 0.050 0.050 scale 512 | 0 setgray 513 | newpath 514 | (Helvetica) findfont 140 scalefont setfont 515 | BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if 516 | 1.000 UL 517 | LTb 518 | LCb setrgbcolor 519 | 686 448 M 520 | 63 0 V 521 | 6198 0 R 522 | -63 0 V 523 | stroke 524 | 602 448 M 525 | [ [(Helvetica) 140.0 0.0 true true 0 (-20)] 526 | ] -46.7 MRshow 527 | 1.000 UL 528 | LTb 529 | LCb setrgbcolor 530 | 686 1143 M 531 | 63 0 V 532 | 6198 0 R 533 | -63 0 V 534 | stroke 535 | 602 1143 M 536 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 537 | ] -46.7 MRshow 538 | 1.000 UL 539 | LTb 540 | LCb setrgbcolor 541 | 686 1838 M 542 | 63 0 V 543 | 6198 0 R 544 | -63 0 V 545 | stroke 546 | 602 1838 M 547 | [ [(Helvetica) 140.0 0.0 true true 0 ( 20)] 548 | ] -46.7 MRshow 549 | 1.000 UL 550 | LTb 551 | LCb setrgbcolor 552 | 686 2534 M 553 | 63 0 V 554 | 6198 0 R 555 | -63 0 V 556 | stroke 557 | 602 2534 M 558 | [ [(Helvetica) 140.0 0.0 true true 0 ( 40)] 559 | ] -46.7 MRshow 560 | 1.000 UL 561 | LTb 562 | LCb setrgbcolor 563 | 686 3229 M 564 | 63 0 V 565 | 6198 0 R 566 | -63 0 V 567 | stroke 568 | 602 3229 M 569 | [ [(Helvetica) 140.0 0.0 true true 0 ( 60)] 570 | ] -46.7 MRshow 571 | 1.000 UL 572 | LTb 573 | LCb setrgbcolor 574 | 686 3924 M 575 | 63 0 V 576 | 6198 0 R 577 | -63 0 V 578 | stroke 579 | 602 3924 M 580 | [ [(Helvetica) 140.0 0.0 true true 0 ( 80)] 581 | ] -46.7 MRshow 582 | 1.000 UL 583 | LTb 584 | LCb setrgbcolor 585 | 686 4619 M 586 | 63 0 V 587 | 6198 0 R 588 | -63 0 V 589 | stroke 590 | 602 4619 M 591 | [ [(Helvetica) 140.0 0.0 true true 0 ( 100)] 592 | ] -46.7 MRshow 593 | 1.000 UL 594 | LTb 595 | LCb setrgbcolor 596 | 686 448 M 597 | 0 63 V 598 | 0 4108 R 599 | 0 -63 V 600 | stroke 601 | 686 308 M 602 | [ [(Helvetica) 140.0 0.0 true true 0 (-10)] 603 | ] -46.7 MCshow 604 | 1.000 UL 605 | LTb 606 | LCb setrgbcolor 607 | 2251 448 M 608 | 0 63 V 609 | 0 4108 R 610 | 0 -63 V 611 | stroke 612 | 2251 308 M 613 | [ [(Helvetica) 140.0 0.0 true true 0 (-5)] 614 | ] -46.7 MCshow 615 | 1.000 UL 616 | LTb 617 | LCb setrgbcolor 618 | 3817 448 M 619 | 0 63 V 620 | 0 4108 R 621 | 0 -63 V 622 | stroke 623 | 3817 308 M 624 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 625 | ] -46.7 MCshow 626 | 1.000 UL 627 | LTb 628 | LCb setrgbcolor 629 | 5382 448 M 630 | 0 63 V 631 | 0 4108 R 632 | 0 -63 V 633 | stroke 634 | 5382 308 M 635 | [ [(Helvetica) 140.0 0.0 true true 0 ( 5)] 636 | ] -46.7 MCshow 637 | 1.000 UL 638 | LTb 639 | LCb setrgbcolor 640 | 6947 448 M 641 | 0 63 V 642 | 0 4108 R 643 | 0 -63 V 644 | stroke 645 | 6947 308 M 646 | [ [(Helvetica) 140.0 0.0 true true 0 ( 10)] 647 | ] -46.7 MCshow 648 | 1.000 UL 649 | LTb 650 | LCb setrgbcolor 651 | 1.000 UL 652 | LTB 653 | LCb setrgbcolor 654 | 686 4619 N 655 | 686 448 L 656 | 6261 0 V 657 | 0 4171 V 658 | -6261 0 V 659 | Z stroke 660 | 1.000 UP 661 | 1.000 UL 662 | LTb 663 | LCb setrgbcolor 664 | LCb setrgbcolor 665 | 112 2533 M 666 | currentpoint gsave translate -270 rotate 0 0 moveto 667 | [ [(Helvetica) 140.0 0.0 true true 0 (x)] 668 | ] -46.7 MCshow 669 | grestore 670 | LTb 671 | LCb setrgbcolor 672 | 3816 98 M 673 | [ [(Helvetica) 140.0 0.0 true true 0 (sin\(x\))] 674 | ] -46.7 MCshow 675 | LTb 676 | LCb setrgbcolor 677 | 3816 4829 M 678 | [ [(Helvetica) 140.0 0.0 true true 0 (Sin Wave Example)] 679 | ] -46.7 MCshow 680 | % Begin plot #1 681 | 4.000 UL 682 | LTb 683 | LCb setrgbcolor 684 | LCb setrgbcolor 685 | 6296 4486 M 686 | [ [(Helvetica) 140.0 0.0 true true 0 (String function)] 687 | ] -46.7 MRshow 688 | 4.000 UL 689 | LTb 690 | LCb setrgbcolor 691 | 6380 4486 M 692 | 399 0 V 693 | 686 1162 M 694 | 63 -6 V 695 | 63 -7 V 696 | 64 -7 V 697 | 63 -7 V 698 | 63 -6 V 699 | 63 -7 V 700 | 64 -5 V 701 | 63 -4 V 702 | 63 -3 V 703 | 63 -1 V 704 | 64 0 V 705 | 63 1 V 706 | 63 2 V 707 | 63 4 V 708 | 64 5 V 709 | 63 6 V 710 | 63 6 V 711 | 63 7 V 712 | 64 7 V 713 | 63 7 V 714 | 63 7 V 715 | 63 5 V 716 | 64 5 V 717 | 63 4 V 718 | 63 2 V 719 | 63 1 V 720 | 64 -1 V 721 | 63 -1 V 722 | 63 -4 V 723 | 63 -4 V 724 | 64 -5 V 725 | 63 -6 V 726 | 63 -7 V 727 | 63 -7 V 728 | 63 -7 V 729 | 64 -7 V 730 | 63 -6 V 731 | 63 -5 V 732 | 63 -4 V 733 | 64 -4 V 734 | 63 -1 V 735 | 63 -1 V 736 | 63 2 V 737 | 64 2 V 738 | 63 4 V 739 | 63 5 V 740 | 63 5 V 741 | 64 7 V 742 | 63 7 V 743 | 63 7 V 744 | 63 7 V 745 | 64 6 V 746 | 63 6 V 747 | 63 5 V 748 | 63 3 V 749 | 64 3 V 750 | 63 1 V 751 | 63 0 V 752 | 63 -2 V 753 | 64 -3 V 754 | 63 -4 V 755 | 63 -6 V 756 | 63 -6 V 757 | 64 -7 V 758 | 63 -6 V 759 | 63 -7 V 760 | 63 -7 V 761 | 63 -6 V 762 | 64 -6 V 763 | 63 -4 V 764 | 63 -3 V 765 | 63 -2 V 766 | 64 -1 V 767 | 63 1 V 768 | 63 3 V 769 | 63 3 V 770 | 64 5 V 771 | 63 6 V 772 | 63 6 V 773 | 63 7 V 774 | 64 7 V 775 | 63 7 V 776 | 63 6 V 777 | 63 6 V 778 | 64 5 V 779 | 63 4 V 780 | 63 3 V 781 | 63 1 V 782 | 64 0 V 783 | 63 -2 V 784 | 63 -3 V 785 | 63 -4 V 786 | 64 -5 V 787 | 63 -6 V 788 | 63 -7 V 789 | 63 -7 V 790 | 64 -7 V 791 | 63 -7 V 792 | 63 -6 V 793 | % End plot #1 794 | % Begin plot #2 795 | 1.000 UP 796 | stroke 797 | 1.000 UL 798 | LTb 799 | LT1 800 | LCb setrgbcolor 801 | LCb setrgbcolor 802 | 6296 4346 M 803 | [ [(Helvetica) 140.0 0.0 true true 0 (Array data)] 804 | ] -46.7 MRshow 805 | 1.000 UP 806 | 1.000 UL 807 | LTb 808 | LT1 809 | LCb setrgbcolor 810 | 6380 4346 M 811 | 399 0 V 812 | 3817 1143 M 813 | 313 35 V 814 | 313 104 V 815 | 313 174 V 816 | 313 243 V 817 | 313 313 V 818 | 313 382 V 819 | 313 452 V 820 | 313 522 V 821 | 313 591 V 822 | 313 660 V 823 | 3817 1143 Pls 824 | 4130 1178 Pls 825 | 4443 1282 Pls 826 | 4756 1456 Pls 827 | 5069 1699 Pls 828 | 5382 2012 Pls 829 | 5695 2394 Pls 830 | 6008 2846 Pls 831 | 6321 3368 Pls 832 | 6634 3959 Pls 833 | 6947 4619 Pls 834 | 6579 4346 Pls 835 | % End plot #2 836 | 2.000 UL 837 | LTb 838 | LCb setrgbcolor 839 | 1.000 UL 840 | LTB 841 | LCb setrgbcolor 842 | 686 4619 N 843 | 686 448 L 844 | 6261 0 V 845 | 0 4171 V 846 | -6261 0 V 847 | Z stroke 848 | 1.000 UP 849 | 1.000 UL 850 | LTb 851 | LCb setrgbcolor 852 | stroke 853 | grestore 854 | end 855 | showpage 856 | %%Trailer 857 | %%DocumentFonts: Helvetica 858 | -------------------------------------------------------------------------------- /spec/fixtures/plots/sin_wave_plot.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-2.0 EPSF-2.0 2 | %%Title: spec/tmp/sin_wave_plot.eps 3 | %%Creator: gnuplot 5.0 patchlevel 5 4 | %%CreationDate: Fri Nov 22 22:30:52 2019 5 | %%DocumentFonts: (atend) 6 | %%BoundingBox: 50 50 410 302 7 | %%EndComments 8 | %%BeginProlog 9 | /gnudict 256 dict def 10 | gnudict begin 11 | % 12 | % The following true/false flags may be edited by hand if desired. 13 | % The unit line width and grayscale image gamma correction may also be changed. 14 | % 15 | /Color false def 16 | /Blacktext false def 17 | /Solid false def 18 | /Dashlength 1 def 19 | /Landscape false def 20 | /Level1 false def 21 | /Level3 false def 22 | /Rounded false def 23 | /ClipToBoundingBox false def 24 | /SuppressPDFMark false def 25 | /TransparentPatterns false def 26 | /gnulinewidth 5.000 def 27 | /userlinewidth gnulinewidth def 28 | /Gamma 1.0 def 29 | /BackgroundColor {-1.000 -1.000 -1.000} def 30 | % 31 | /vshift -46 def 32 | /dl1 { 33 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 34 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if 35 | } def 36 | /dl2 { 37 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 38 | Rounded { currentlinewidth 0.75 mul add } if 39 | } def 40 | /hpt_ 31.5 def 41 | /vpt_ 31.5 def 42 | /hpt hpt_ def 43 | /vpt vpt_ def 44 | /doclip { 45 | ClipToBoundingBox { 46 | newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath 47 | clip 48 | } if 49 | } def 50 | % 51 | % Gnuplot Prolog Version 5.1 (Oct 2015) 52 | % 53 | %/SuppressPDFMark true def 54 | % 55 | /M {moveto} bind def 56 | /L {lineto} bind def 57 | /R {rmoveto} bind def 58 | /V {rlineto} bind def 59 | /N {newpath moveto} bind def 60 | /Z {closepath} bind def 61 | /C {setrgbcolor} bind def 62 | /f {rlineto fill} bind def 63 | /g {setgray} bind def 64 | /Gshow {show} def % May be redefined later in the file to support UTF-8 65 | /vpt2 vpt 2 mul def 66 | /hpt2 hpt 2 mul def 67 | /Lshow {currentpoint stroke M 0 vshift R 68 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 69 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R 70 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 71 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 72 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 73 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def 74 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def 75 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} 76 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def 77 | /BL {stroke userlinewidth 2 mul setlinewidth 78 | Rounded {1 setlinejoin 1 setlinecap} if} def 79 | /AL {stroke userlinewidth 2 div setlinewidth 80 | Rounded {1 setlinejoin 1 setlinecap} if} def 81 | /UL {dup gnulinewidth mul /userlinewidth exch def 82 | dup 1 lt {pop 1} if 10 mul /udl exch def} def 83 | /PL {stroke userlinewidth setlinewidth 84 | Rounded {1 setlinejoin 1 setlinecap} if} def 85 | 3.8 setmiterlimit 86 | % Classic Line colors (version 5.0) 87 | /LCw {1 1 1} def 88 | /LCb {0 0 0} def 89 | /LCa {0 0 0} def 90 | /LC0 {1 0 0} def 91 | /LC1 {0 1 0} def 92 | /LC2 {0 0 1} def 93 | /LC3 {1 0 1} def 94 | /LC4 {0 1 1} def 95 | /LC5 {1 1 0} def 96 | /LC6 {0 0 0} def 97 | /LC7 {1 0.3 0} def 98 | /LC8 {0.5 0.5 0.5} def 99 | % Default dash patterns (version 5.0) 100 | /LTB {BL [] LCb DL} def 101 | /LTw {PL [] 1 setgray} def 102 | /LTb {PL [] LCb DL} def 103 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def 104 | /LT0 {PL [] LC0 DL} def 105 | /LT1 {PL [2 dl1 3 dl2] LC1 DL} def 106 | /LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def 107 | /LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def 108 | /LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def 109 | /LT5 {PL [4 dl1 2 dl2] LC5 DL} def 110 | /LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def 111 | /LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def 112 | /LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def 113 | /SL {[] 0 setdash} def 114 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def 115 | /Dia {stroke [] 0 setdash 2 copy vpt add M 116 | hpt neg vpt neg V hpt vpt neg V 117 | hpt vpt V hpt neg vpt V closepath stroke 118 | Pnt} def 119 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V 120 | currentpoint stroke M 121 | hpt neg vpt neg R hpt2 0 V stroke 122 | } def 123 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 124 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 125 | hpt2 neg 0 V closepath stroke 126 | Pnt} def 127 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M 128 | hpt2 vpt2 neg V currentpoint stroke M 129 | hpt2 neg 0 R hpt2 vpt2 V stroke} def 130 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M 131 | hpt neg vpt -1.62 mul V 132 | hpt 2 mul 0 V 133 | hpt neg vpt 1.62 mul V closepath stroke 134 | Pnt} def 135 | /Star {2 copy Pls Crs} def 136 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M 137 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 138 | hpt2 neg 0 V closepath fill} def 139 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M 140 | hpt neg vpt -1.62 mul V 141 | hpt 2 mul 0 V 142 | hpt neg vpt 1.62 mul V closepath fill} def 143 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M 144 | hpt neg vpt 1.62 mul V 145 | hpt 2 mul 0 V 146 | hpt neg vpt -1.62 mul V closepath stroke 147 | Pnt} def 148 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M 149 | hpt neg vpt 1.62 mul V 150 | hpt 2 mul 0 V 151 | hpt neg vpt -1.62 mul V closepath fill} def 152 | /DiaF {stroke [] 0 setdash vpt add M 153 | hpt neg vpt neg V hpt vpt neg V 154 | hpt vpt V hpt neg vpt V closepath fill} def 155 | /Pent {stroke [] 0 setdash 2 copy gsave 156 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 157 | closepath stroke grestore Pnt} def 158 | /PentF {stroke [] 0 setdash gsave 159 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 160 | closepath fill grestore} def 161 | /Circle {stroke [] 0 setdash 2 copy 162 | hpt 0 360 arc stroke Pnt} def 163 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def 164 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def 165 | /C1 {BL [] 0 setdash 2 copy moveto 166 | 2 copy vpt 0 90 arc closepath fill 167 | vpt 0 360 arc closepath} bind def 168 | /C2 {BL [] 0 setdash 2 copy moveto 169 | 2 copy vpt 90 180 arc closepath fill 170 | vpt 0 360 arc closepath} bind def 171 | /C3 {BL [] 0 setdash 2 copy moveto 172 | 2 copy vpt 0 180 arc closepath fill 173 | vpt 0 360 arc closepath} bind def 174 | /C4 {BL [] 0 setdash 2 copy moveto 175 | 2 copy vpt 180 270 arc closepath fill 176 | vpt 0 360 arc closepath} bind def 177 | /C5 {BL [] 0 setdash 2 copy moveto 178 | 2 copy vpt 0 90 arc 179 | 2 copy moveto 180 | 2 copy vpt 180 270 arc closepath fill 181 | vpt 0 360 arc} bind def 182 | /C6 {BL [] 0 setdash 2 copy moveto 183 | 2 copy vpt 90 270 arc closepath fill 184 | vpt 0 360 arc closepath} bind def 185 | /C7 {BL [] 0 setdash 2 copy moveto 186 | 2 copy vpt 0 270 arc closepath fill 187 | vpt 0 360 arc closepath} bind def 188 | /C8 {BL [] 0 setdash 2 copy moveto 189 | 2 copy vpt 270 360 arc closepath fill 190 | vpt 0 360 arc closepath} bind def 191 | /C9 {BL [] 0 setdash 2 copy moveto 192 | 2 copy vpt 270 450 arc closepath fill 193 | vpt 0 360 arc closepath} bind def 194 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill 195 | 2 copy moveto 196 | 2 copy vpt 90 180 arc closepath fill 197 | vpt 0 360 arc closepath} bind def 198 | /C11 {BL [] 0 setdash 2 copy moveto 199 | 2 copy vpt 0 180 arc closepath fill 200 | 2 copy moveto 201 | 2 copy vpt 270 360 arc closepath fill 202 | vpt 0 360 arc closepath} bind def 203 | /C12 {BL [] 0 setdash 2 copy moveto 204 | 2 copy vpt 180 360 arc closepath fill 205 | vpt 0 360 arc closepath} bind def 206 | /C13 {BL [] 0 setdash 2 copy moveto 207 | 2 copy vpt 0 90 arc closepath fill 208 | 2 copy moveto 209 | 2 copy vpt 180 360 arc closepath fill 210 | vpt 0 360 arc closepath} bind def 211 | /C14 {BL [] 0 setdash 2 copy moveto 212 | 2 copy vpt 90 360 arc closepath fill 213 | vpt 0 360 arc} bind def 214 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill 215 | vpt 0 360 arc closepath} bind def 216 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto 217 | neg 0 rlineto closepath} bind def 218 | /Square {dup Rec} bind def 219 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def 220 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def 221 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def 222 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 223 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def 224 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 225 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill 226 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 227 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def 228 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill 229 | 2 copy vpt Square fill Bsquare} bind def 230 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def 231 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def 232 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill 233 | Bsquare} bind def 234 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill 235 | Bsquare} bind def 236 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def 237 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 238 | 2 copy vpt Square fill Bsquare} bind def 239 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 240 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 241 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def 242 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def 243 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def 244 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def 245 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def 246 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def 247 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def 248 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def 249 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def 250 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def 251 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def 252 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def 253 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def 254 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def 255 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def 256 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def 257 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def 258 | /DiaE {stroke [] 0 setdash vpt add M 259 | hpt neg vpt neg V hpt vpt neg V 260 | hpt vpt V hpt neg vpt V closepath stroke} def 261 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M 262 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 263 | hpt2 neg 0 V closepath stroke} def 264 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M 265 | hpt neg vpt -1.62 mul V 266 | hpt 2 mul 0 V 267 | hpt neg vpt 1.62 mul V closepath stroke} def 268 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M 269 | hpt neg vpt 1.62 mul V 270 | hpt 2 mul 0 V 271 | hpt neg vpt -1.62 mul V closepath stroke} def 272 | /PentE {stroke [] 0 setdash gsave 273 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 274 | closepath stroke grestore} def 275 | /CircE {stroke [] 0 setdash 276 | hpt 0 360 arc stroke} def 277 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def 278 | /DiaW {stroke [] 0 setdash vpt add M 279 | hpt neg vpt neg V hpt vpt neg V 280 | hpt vpt V hpt neg vpt V Opaque stroke} def 281 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M 282 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 283 | hpt2 neg 0 V Opaque stroke} def 284 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M 285 | hpt neg vpt -1.62 mul V 286 | hpt 2 mul 0 V 287 | hpt neg vpt 1.62 mul V Opaque stroke} def 288 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M 289 | hpt neg vpt 1.62 mul V 290 | hpt 2 mul 0 V 291 | hpt neg vpt -1.62 mul V Opaque stroke} def 292 | /PentW {stroke [] 0 setdash gsave 293 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 294 | Opaque stroke grestore} def 295 | /CircW {stroke [] 0 setdash 296 | hpt 0 360 arc Opaque stroke} def 297 | /BoxFill {gsave Rec 1 setgray fill grestore} def 298 | /Density { 299 | /Fillden exch def 300 | currentrgbcolor 301 | /ColB exch def /ColG exch def /ColR exch def 302 | /ColR ColR Fillden mul Fillden sub 1 add def 303 | /ColG ColG Fillden mul Fillden sub 1 add def 304 | /ColB ColB Fillden mul Fillden sub 1 add def 305 | ColR ColG ColB setrgbcolor} def 306 | /BoxColFill {gsave Rec PolyFill} def 307 | /PolyFill {gsave Density fill grestore grestore} def 308 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def 309 | % 310 | % PostScript Level 1 Pattern Fill routine for rectangles 311 | % Usage: x y w h s a XX PatternFill 312 | % x,y = lower left corner of box to be filled 313 | % w,h = width and height of box 314 | % a = angle in degrees between lines and x-axis 315 | % XX = 0/1 for no/yes cross-hatch 316 | % 317 | /PatternFill {gsave /PFa [ 9 2 roll ] def 318 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate 319 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec 320 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 321 | clip 322 | currentlinewidth 0.5 mul setlinewidth 323 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def 324 | 0 0 M PFa 5 get rotate PFs -2 div dup translate 325 | 0 1 PFs PFa 4 get div 1 add floor cvi 326 | {PFa 4 get mul 0 M 0 PFs V} for 327 | 0 PFa 6 get ne { 328 | 0 1 PFs PFa 4 get div 1 add floor cvi 329 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for 330 | } if 331 | stroke grestore} def 332 | % 333 | /languagelevel where 334 | {pop languagelevel} {1} ifelse 335 | dup 2 lt 336 | {/InterpretLevel1 true def 337 | /InterpretLevel3 false def} 338 | {/InterpretLevel1 Level1 def 339 | 2 gt 340 | {/InterpretLevel3 Level3 def} 341 | {/InterpretLevel3 false def} 342 | ifelse } 343 | ifelse 344 | % 345 | % PostScript level 2 pattern fill definitions 346 | % 347 | /Level2PatternFill { 348 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} 349 | bind def 350 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def 351 | << Tile8x8 352 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 353 | >> matrix makepattern 354 | /Pat1 exch def 355 | << Tile8x8 356 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke 357 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} 358 | >> matrix makepattern 359 | /Pat2 exch def 360 | << Tile8x8 361 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L 362 | 8 8 L 8 0 L 0 0 L fill} 363 | >> matrix makepattern 364 | /Pat3 exch def 365 | << Tile8x8 366 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L 367 | 0 12 M 12 0 L stroke} 368 | >> matrix makepattern 369 | /Pat4 exch def 370 | << Tile8x8 371 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L 372 | 0 -4 M 12 8 L stroke} 373 | >> matrix makepattern 374 | /Pat5 exch def 375 | << Tile8x8 376 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L 377 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} 378 | >> matrix makepattern 379 | /Pat6 exch def 380 | << Tile8x8 381 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L 382 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} 383 | >> matrix makepattern 384 | /Pat7 exch def 385 | << Tile8x8 386 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L 387 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} 388 | >> matrix makepattern 389 | /Pat8 exch def 390 | << Tile8x8 391 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L 392 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} 393 | >> matrix makepattern 394 | /Pat9 exch def 395 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def 396 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def 397 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def 398 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def 399 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def 400 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def 401 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def 402 | } def 403 | % 404 | % 405 | %End of PostScript Level 2 code 406 | % 407 | /PatternBgnd { 408 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 409 | } def 410 | % 411 | % Substitute for Level 2 pattern fill codes with 412 | % grayscale if Level 2 support is not selected. 413 | % 414 | /Level1PatternFill { 415 | /Pattern1 {0.250 Density} bind def 416 | /Pattern2 {0.500 Density} bind def 417 | /Pattern3 {0.750 Density} bind def 418 | /Pattern4 {0.125 Density} bind def 419 | /Pattern5 {0.375 Density} bind def 420 | /Pattern6 {0.625 Density} bind def 421 | /Pattern7 {0.875 Density} bind def 422 | } def 423 | % 424 | % Now test for support of Level 2 code 425 | % 426 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse 427 | % 428 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont 429 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall 430 | currentdict end definefont pop 431 | % 432 | /MFshow { 433 | { dup 5 get 3 ge 434 | { 5 get 3 eq {gsave} {grestore} ifelse } 435 | {dup dup 0 get findfont exch 1 get scalefont setfont 436 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 437 | get exch 4 get {textshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq 438 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 439 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div 440 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get 441 | textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop 442 | pop aload pop M} ifelse }ifelse }ifelse } 443 | ifelse } 444 | forall} def 445 | /Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def 446 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } 447 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont 448 | 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def 449 | /MLshow { currentpoint stroke M 450 | 0 exch R 451 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 452 | /MRshow { currentpoint stroke M 453 | exch dup MFwidth neg 3 -1 roll R 454 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 455 | /MCshow { currentpoint stroke M 456 | exch dup MFwidth -2 div 3 -1 roll R 457 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 458 | /XYsave { [( ) 1 2 true false 3 ()] } bind def 459 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def 460 | Level1 SuppressPDFMark or 461 | {} { 462 | /SDict 10 dict def 463 | systemdict /pdfmark known not { 464 | userdict /pdfmark systemdict /cleartomark get put 465 | } if 466 | SDict begin [ 467 | /Title (spec/tmp/sin_wave_plot.eps) 468 | /Subject (gnuplot plot) 469 | /Creator (gnuplot 5.0 patchlevel 5) 470 | % /Producer (gnuplot) 471 | % /Keywords () 472 | /CreationDate (Fri Nov 22 22:30:52 2019) 473 | /DOCINFO pdfmark 474 | end 475 | } ifelse 476 | % 477 | % Support for boxed text - Ethan A Merritt May 2005 478 | % 479 | /InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put 480 | userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put 481 | /Boxing true def } def 482 | /ExtendTextBox { Boxing 483 | { gsave dup false charpath pathbbox 484 | dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse 485 | dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse 486 | dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse 487 | dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse 488 | grestore } if } def 489 | /PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M 490 | TBx1 TBxmargin sub TBy2 TBymargin add L 491 | TBx2 TBxmargin add TBy2 TBymargin add L 492 | TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def 493 | /DrawTextBox { PopTextBox stroke /Boxing false def} def 494 | /FillTextBox { gsave PopTextBox 1 1 1 setrgbcolor fill grestore /Boxing false def} def 495 | 0 0 0 0 InitTextBox 496 | /TBxmargin 20 def 497 | /TBymargin 20 def 498 | /Boxing false def 499 | /textshow { ExtendTextBox Gshow } def 500 | % 501 | % redundant definitions for compatibility with prologue.ps older than 5.0.2 502 | /LTB {BL [] LCb DL} def 503 | /LTb {PL [] LCb DL} def 504 | end 505 | %%EndProlog 506 | %%Page: 1 1 507 | gnudict begin 508 | gsave 509 | doclip 510 | 50 50 translate 511 | 0.050 0.050 scale 512 | 0 setgray 513 | newpath 514 | (Helvetica) findfont 140 scalefont setfont 515 | BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if 516 | /Helvetica findfont 140 scalefont setfont 517 | /vshift -46 def 518 | 1.000 UL 519 | LTb 520 | LCb setrgbcolor 521 | 686 448 M 522 | 63 0 V 523 | 6198 0 R 524 | -63 0 V 525 | stroke 526 | 602 448 M 527 | [ [(Helvetica) 140.0 0.0 true true 0 (-1)] 528 | ] -46.7 MRshow 529 | 1.000 UL 530 | LTb 531 | LCb setrgbcolor 532 | 686 865 M 533 | 63 0 V 534 | 6198 0 R 535 | -63 0 V 536 | stroke 537 | 602 865 M 538 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.8)] 539 | ] -46.7 MRshow 540 | 1.000 UL 541 | LTb 542 | LCb setrgbcolor 543 | 686 1282 M 544 | 63 0 V 545 | 6198 0 R 546 | -63 0 V 547 | stroke 548 | 602 1282 M 549 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.6)] 550 | ] -46.7 MRshow 551 | 1.000 UL 552 | LTb 553 | LCb setrgbcolor 554 | 686 1699 M 555 | 63 0 V 556 | 6198 0 R 557 | -63 0 V 558 | stroke 559 | 602 1699 M 560 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.4)] 561 | ] -46.7 MRshow 562 | 1.000 UL 563 | LTb 564 | LCb setrgbcolor 565 | 686 2116 M 566 | 63 0 V 567 | 6198 0 R 568 | -63 0 V 569 | stroke 570 | 602 2116 M 571 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.2)] 572 | ] -46.7 MRshow 573 | 1.000 UL 574 | LTb 575 | LCb setrgbcolor 576 | 686 2534 M 577 | 63 0 V 578 | 6198 0 R 579 | -63 0 V 580 | stroke 581 | 602 2534 M 582 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 583 | ] -46.7 MRshow 584 | 1.000 UL 585 | LTb 586 | LCb setrgbcolor 587 | 686 2951 M 588 | 63 0 V 589 | 6198 0 R 590 | -63 0 V 591 | stroke 592 | 602 2951 M 593 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] 594 | ] -46.7 MRshow 595 | 1.000 UL 596 | LTb 597 | LCb setrgbcolor 598 | 686 3368 M 599 | 63 0 V 600 | 6198 0 R 601 | -63 0 V 602 | stroke 603 | 602 3368 M 604 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] 605 | ] -46.7 MRshow 606 | 1.000 UL 607 | LTb 608 | LCb setrgbcolor 609 | 686 3785 M 610 | 63 0 V 611 | 6198 0 R 612 | -63 0 V 613 | stroke 614 | 602 3785 M 615 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] 616 | ] -46.7 MRshow 617 | 1.000 UL 618 | LTb 619 | LCb setrgbcolor 620 | 686 4202 M 621 | 63 0 V 622 | 6198 0 R 623 | -63 0 V 624 | stroke 625 | 602 4202 M 626 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] 627 | ] -46.7 MRshow 628 | 1.000 UL 629 | LTb 630 | LCb setrgbcolor 631 | 686 4619 M 632 | 63 0 V 633 | 6198 0 R 634 | -63 0 V 635 | stroke 636 | 602 4619 M 637 | [ [(Helvetica) 140.0 0.0 true true 0 ( 1)] 638 | ] -46.7 MRshow 639 | 1.000 UL 640 | LTb 641 | LCb setrgbcolor 642 | 686 448 M 643 | 0 63 V 644 | 0 4108 R 645 | 0 -63 V 646 | stroke 647 | 686 308 M 648 | [ [(Helvetica) 140.0 0.0 true true 0 (-10)] 649 | ] -46.7 MCshow 650 | 1.000 UL 651 | LTb 652 | LCb setrgbcolor 653 | 2251 448 M 654 | 0 63 V 655 | 0 4108 R 656 | 0 -63 V 657 | stroke 658 | 2251 308 M 659 | [ [(Helvetica) 140.0 0.0 true true 0 (-5)] 660 | ] -46.7 MCshow 661 | 1.000 UL 662 | LTb 663 | LCb setrgbcolor 664 | 3817 448 M 665 | 0 63 V 666 | 0 4108 R 667 | 0 -63 V 668 | stroke 669 | 3817 308 M 670 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 671 | ] -46.7 MCshow 672 | 1.000 UL 673 | LTb 674 | LCb setrgbcolor 675 | 5382 448 M 676 | 0 63 V 677 | 0 4108 R 678 | 0 -63 V 679 | stroke 680 | 5382 308 M 681 | [ [(Helvetica) 140.0 0.0 true true 0 ( 5)] 682 | ] -46.7 MCshow 683 | 1.000 UL 684 | LTb 685 | LCb setrgbcolor 686 | 6947 448 M 687 | 0 63 V 688 | 0 4108 R 689 | 0 -63 V 690 | stroke 691 | 6947 308 M 692 | [ [(Helvetica) 140.0 0.0 true true 0 ( 10)] 693 | ] -46.7 MCshow 694 | 1.000 UL 695 | LTb 696 | LCb setrgbcolor 697 | 1.000 UL 698 | LTB 699 | LCb setrgbcolor 700 | 686 4619 N 701 | 686 448 L 702 | 6261 0 V 703 | 0 4171 V 704 | -6261 0 V 705 | Z stroke 706 | 1.000 UP 707 | 1.000 UL 708 | LTb 709 | LCb setrgbcolor 710 | LCb setrgbcolor 711 | 112 2533 M 712 | currentpoint gsave translate -270 rotate 0 0 moveto 713 | [ [(Helvetica) 140.0 0.0 true true 0 (x)] 714 | ] -46.7 MCshow 715 | grestore 716 | LTb 717 | LCb setrgbcolor 718 | 3816 98 M 719 | [ [(Helvetica) 140.0 0.0 true true 0 (sin\(x\))] 720 | ] -46.7 MCshow 721 | LTb 722 | LCb setrgbcolor 723 | 3816 4829 M 724 | [ [(Helvetica) 140.0 0.0 true true 0 (Sin Wave Example)] 725 | ] -46.7 MCshow 726 | % Begin plot #1 727 | 4.000 UL 728 | LTb 729 | LCb setrgbcolor 730 | /Helvetica findfont 140 scalefont setfont 731 | LCb setrgbcolor 732 | 6296 4486 M 733 | (sin\(x\)) Rshow 734 | 4.000 UL 735 | LTb 736 | LCb setrgbcolor 737 | 6380 4486 M 738 | 399 0 V 739 | 686 3668 M 740 | 63 -374 V 741 | 63 -405 V 742 | 64 -420 V 743 | 63 -417 V 744 | 63 -397 V 745 | 63 -362 V 746 | 64 -311 V 747 | 63 -248 V 748 | 63 -175 V 749 | 63 -95 V 750 | 64 -10 V 751 | 63 74 V 752 | 63 156 V 753 | 63 231 V 754 | 64 297 V 755 | 63 350 V 756 | 63 390 V 757 | 63 414 V 758 | 64 420 V 759 | 63 411 V 760 | 63 383 V 761 | 63 341 V 762 | 64 284 V 763 | 63 216 V 764 | 63 140 V 765 | 63 57 V 766 | 64 -28 V 767 | 63 -111 V 768 | 63 -191 V 769 | 63 -262 V 770 | 64 -322 V 771 | 63 -370 V 772 | 63 -403 V 773 | 63 -419 V 774 | 63 -418 V 775 | 64 -400 V 776 | 63 -366 V 777 | 63 -317 V 778 | 63 -255 V 779 | 64 -183 V 780 | 63 -103 V 781 | 63 -19 V 782 | 63 66 V 783 | 64 147 V 784 | 63 224 V 785 | 63 291 V 786 | 63 345 V 787 | 64 387 V 788 | 63 412 V 789 | 63 421 V 790 | 63 412 V 791 | 64 387 V 792 | 63 345 V 793 | 63 291 V 794 | 63 224 V 795 | 64 147 V 796 | 63 66 V 797 | 63 -19 V 798 | 63 -103 V 799 | 64 -183 V 800 | 63 -255 V 801 | 63 -317 V 802 | 63 -366 V 803 | 64 -400 V 804 | 63 -418 V 805 | 63 -419 V 806 | 63 -403 V 807 | 63 -370 V 808 | 64 -322 V 809 | 63 -262 V 810 | 63 -191 V 811 | 63 -111 V 812 | 64 -28 V 813 | 63 57 V 814 | 63 140 V 815 | 63 216 V 816 | 64 284 V 817 | 63 341 V 818 | 63 383 V 819 | 63 411 V 820 | 64 420 V 821 | 63 414 V 822 | 63 390 V 823 | 63 350 V 824 | 64 297 V 825 | 63 231 V 826 | 63 156 V 827 | 63 74 V 828 | 64 -10 V 829 | 63 -95 V 830 | 63 -175 V 831 | 63 -248 V 832 | 64 -311 V 833 | 63 -362 V 834 | 63 -397 V 835 | 63 -417 V 836 | 64 -420 V 837 | 63 -405 V 838 | 63 -374 V 839 | % End plot #1 840 | stroke 841 | 2.000 UL 842 | LTb 843 | LCb setrgbcolor 844 | 1.000 UL 845 | LTB 846 | LCb setrgbcolor 847 | 686 4619 N 848 | 686 448 L 849 | 6261 0 V 850 | 0 4171 V 851 | -6261 0 V 852 | Z stroke 853 | 1.000 UP 854 | 1.000 UL 855 | LTb 856 | LCb setrgbcolor 857 | stroke 858 | grestore 859 | end 860 | showpage 861 | %%Trailer 862 | %%DocumentFonts: Helvetica 863 | -------------------------------------------------------------------------------- /spec/fixtures/plots/histogram_plot.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-2.0 EPSF-2.0 2 | %%Title: spec/tmp/histogram_plot.eps 3 | %%Creator: gnuplot 5.0 patchlevel 5 4 | %%CreationDate: Fri Nov 22 22:11:02 2019 5 | %%DocumentFonts: (atend) 6 | %%BoundingBox: 50 50 410 302 7 | %%EndComments 8 | %%BeginProlog 9 | /gnudict 256 dict def 10 | gnudict begin 11 | % 12 | % The following true/false flags may be edited by hand if desired. 13 | % The unit line width and grayscale image gamma correction may also be changed. 14 | % 15 | /Color false def 16 | /Blacktext false def 17 | /Solid false def 18 | /Dashlength 1 def 19 | /Landscape false def 20 | /Level1 false def 21 | /Level3 false def 22 | /Rounded false def 23 | /ClipToBoundingBox false def 24 | /SuppressPDFMark false def 25 | /TransparentPatterns false def 26 | /gnulinewidth 5.000 def 27 | /userlinewidth gnulinewidth def 28 | /Gamma 1.0 def 29 | /BackgroundColor {-1.000 -1.000 -1.000} def 30 | % 31 | /vshift -46 def 32 | /dl1 { 33 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 34 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if 35 | } def 36 | /dl2 { 37 | 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 38 | Rounded { currentlinewidth 0.75 mul add } if 39 | } def 40 | /hpt_ 31.5 def 41 | /vpt_ 31.5 def 42 | /hpt hpt_ def 43 | /vpt vpt_ def 44 | /doclip { 45 | ClipToBoundingBox { 46 | newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath 47 | clip 48 | } if 49 | } def 50 | % 51 | % Gnuplot Prolog Version 5.1 (Oct 2015) 52 | % 53 | %/SuppressPDFMark true def 54 | % 55 | /M {moveto} bind def 56 | /L {lineto} bind def 57 | /R {rmoveto} bind def 58 | /V {rlineto} bind def 59 | /N {newpath moveto} bind def 60 | /Z {closepath} bind def 61 | /C {setrgbcolor} bind def 62 | /f {rlineto fill} bind def 63 | /g {setgray} bind def 64 | /Gshow {show} def % May be redefined later in the file to support UTF-8 65 | /vpt2 vpt 2 mul def 66 | /hpt2 hpt 2 mul def 67 | /Lshow {currentpoint stroke M 0 vshift R 68 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 69 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R 70 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 71 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 72 | Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def 73 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def 74 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def 75 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} 76 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def 77 | /BL {stroke userlinewidth 2 mul setlinewidth 78 | Rounded {1 setlinejoin 1 setlinecap} if} def 79 | /AL {stroke userlinewidth 2 div setlinewidth 80 | Rounded {1 setlinejoin 1 setlinecap} if} def 81 | /UL {dup gnulinewidth mul /userlinewidth exch def 82 | dup 1 lt {pop 1} if 10 mul /udl exch def} def 83 | /PL {stroke userlinewidth setlinewidth 84 | Rounded {1 setlinejoin 1 setlinecap} if} def 85 | 3.8 setmiterlimit 86 | % Classic Line colors (version 5.0) 87 | /LCw {1 1 1} def 88 | /LCb {0 0 0} def 89 | /LCa {0 0 0} def 90 | /LC0 {1 0 0} def 91 | /LC1 {0 1 0} def 92 | /LC2 {0 0 1} def 93 | /LC3 {1 0 1} def 94 | /LC4 {0 1 1} def 95 | /LC5 {1 1 0} def 96 | /LC6 {0 0 0} def 97 | /LC7 {1 0.3 0} def 98 | /LC8 {0.5 0.5 0.5} def 99 | % Default dash patterns (version 5.0) 100 | /LTB {BL [] LCb DL} def 101 | /LTw {PL [] 1 setgray} def 102 | /LTb {PL [] LCb DL} def 103 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def 104 | /LT0 {PL [] LC0 DL} def 105 | /LT1 {PL [2 dl1 3 dl2] LC1 DL} def 106 | /LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def 107 | /LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def 108 | /LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def 109 | /LT5 {PL [4 dl1 2 dl2] LC5 DL} def 110 | /LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def 111 | /LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def 112 | /LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def 113 | /SL {[] 0 setdash} def 114 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def 115 | /Dia {stroke [] 0 setdash 2 copy vpt add M 116 | hpt neg vpt neg V hpt vpt neg V 117 | hpt vpt V hpt neg vpt V closepath stroke 118 | Pnt} def 119 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V 120 | currentpoint stroke M 121 | hpt neg vpt neg R hpt2 0 V stroke 122 | } def 123 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 124 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 125 | hpt2 neg 0 V closepath stroke 126 | Pnt} def 127 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M 128 | hpt2 vpt2 neg V currentpoint stroke M 129 | hpt2 neg 0 R hpt2 vpt2 V stroke} def 130 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M 131 | hpt neg vpt -1.62 mul V 132 | hpt 2 mul 0 V 133 | hpt neg vpt 1.62 mul V closepath stroke 134 | Pnt} def 135 | /Star {2 copy Pls Crs} def 136 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M 137 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 138 | hpt2 neg 0 V closepath fill} def 139 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M 140 | hpt neg vpt -1.62 mul V 141 | hpt 2 mul 0 V 142 | hpt neg vpt 1.62 mul V closepath fill} def 143 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M 144 | hpt neg vpt 1.62 mul V 145 | hpt 2 mul 0 V 146 | hpt neg vpt -1.62 mul V closepath stroke 147 | Pnt} def 148 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M 149 | hpt neg vpt 1.62 mul V 150 | hpt 2 mul 0 V 151 | hpt neg vpt -1.62 mul V closepath fill} def 152 | /DiaF {stroke [] 0 setdash vpt add M 153 | hpt neg vpt neg V hpt vpt neg V 154 | hpt vpt V hpt neg vpt V closepath fill} def 155 | /Pent {stroke [] 0 setdash 2 copy gsave 156 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 157 | closepath stroke grestore Pnt} def 158 | /PentF {stroke [] 0 setdash gsave 159 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 160 | closepath fill grestore} def 161 | /Circle {stroke [] 0 setdash 2 copy 162 | hpt 0 360 arc stroke Pnt} def 163 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def 164 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def 165 | /C1 {BL [] 0 setdash 2 copy moveto 166 | 2 copy vpt 0 90 arc closepath fill 167 | vpt 0 360 arc closepath} bind def 168 | /C2 {BL [] 0 setdash 2 copy moveto 169 | 2 copy vpt 90 180 arc closepath fill 170 | vpt 0 360 arc closepath} bind def 171 | /C3 {BL [] 0 setdash 2 copy moveto 172 | 2 copy vpt 0 180 arc closepath fill 173 | vpt 0 360 arc closepath} bind def 174 | /C4 {BL [] 0 setdash 2 copy moveto 175 | 2 copy vpt 180 270 arc closepath fill 176 | vpt 0 360 arc closepath} bind def 177 | /C5 {BL [] 0 setdash 2 copy moveto 178 | 2 copy vpt 0 90 arc 179 | 2 copy moveto 180 | 2 copy vpt 180 270 arc closepath fill 181 | vpt 0 360 arc} bind def 182 | /C6 {BL [] 0 setdash 2 copy moveto 183 | 2 copy vpt 90 270 arc closepath fill 184 | vpt 0 360 arc closepath} bind def 185 | /C7 {BL [] 0 setdash 2 copy moveto 186 | 2 copy vpt 0 270 arc closepath fill 187 | vpt 0 360 arc closepath} bind def 188 | /C8 {BL [] 0 setdash 2 copy moveto 189 | 2 copy vpt 270 360 arc closepath fill 190 | vpt 0 360 arc closepath} bind def 191 | /C9 {BL [] 0 setdash 2 copy moveto 192 | 2 copy vpt 270 450 arc closepath fill 193 | vpt 0 360 arc closepath} bind def 194 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill 195 | 2 copy moveto 196 | 2 copy vpt 90 180 arc closepath fill 197 | vpt 0 360 arc closepath} bind def 198 | /C11 {BL [] 0 setdash 2 copy moveto 199 | 2 copy vpt 0 180 arc closepath fill 200 | 2 copy moveto 201 | 2 copy vpt 270 360 arc closepath fill 202 | vpt 0 360 arc closepath} bind def 203 | /C12 {BL [] 0 setdash 2 copy moveto 204 | 2 copy vpt 180 360 arc closepath fill 205 | vpt 0 360 arc closepath} bind def 206 | /C13 {BL [] 0 setdash 2 copy moveto 207 | 2 copy vpt 0 90 arc closepath fill 208 | 2 copy moveto 209 | 2 copy vpt 180 360 arc closepath fill 210 | vpt 0 360 arc closepath} bind def 211 | /C14 {BL [] 0 setdash 2 copy moveto 212 | 2 copy vpt 90 360 arc closepath fill 213 | vpt 0 360 arc} bind def 214 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill 215 | vpt 0 360 arc closepath} bind def 216 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto 217 | neg 0 rlineto closepath} bind def 218 | /Square {dup Rec} bind def 219 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def 220 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def 221 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def 222 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 223 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def 224 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 225 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill 226 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def 227 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def 228 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill 229 | 2 copy vpt Square fill Bsquare} bind def 230 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def 231 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def 232 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill 233 | Bsquare} bind def 234 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill 235 | Bsquare} bind def 236 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def 237 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 238 | 2 copy vpt Square fill Bsquare} bind def 239 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill 240 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def 241 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def 242 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def 243 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def 244 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def 245 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def 246 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def 247 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def 248 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def 249 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def 250 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def 251 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def 252 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def 253 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def 254 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def 255 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def 256 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def 257 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def 258 | /DiaE {stroke [] 0 setdash vpt add M 259 | hpt neg vpt neg V hpt vpt neg V 260 | hpt vpt V hpt neg vpt V closepath stroke} def 261 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M 262 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 263 | hpt2 neg 0 V closepath stroke} def 264 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M 265 | hpt neg vpt -1.62 mul V 266 | hpt 2 mul 0 V 267 | hpt neg vpt 1.62 mul V closepath stroke} def 268 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M 269 | hpt neg vpt 1.62 mul V 270 | hpt 2 mul 0 V 271 | hpt neg vpt -1.62 mul V closepath stroke} def 272 | /PentE {stroke [] 0 setdash gsave 273 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 274 | closepath stroke grestore} def 275 | /CircE {stroke [] 0 setdash 276 | hpt 0 360 arc stroke} def 277 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def 278 | /DiaW {stroke [] 0 setdash vpt add M 279 | hpt neg vpt neg V hpt vpt neg V 280 | hpt vpt V hpt neg vpt V Opaque stroke} def 281 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M 282 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V 283 | hpt2 neg 0 V Opaque stroke} def 284 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M 285 | hpt neg vpt -1.62 mul V 286 | hpt 2 mul 0 V 287 | hpt neg vpt 1.62 mul V Opaque stroke} def 288 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M 289 | hpt neg vpt 1.62 mul V 290 | hpt 2 mul 0 V 291 | hpt neg vpt -1.62 mul V Opaque stroke} def 292 | /PentW {stroke [] 0 setdash gsave 293 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat 294 | Opaque stroke grestore} def 295 | /CircW {stroke [] 0 setdash 296 | hpt 0 360 arc Opaque stroke} def 297 | /BoxFill {gsave Rec 1 setgray fill grestore} def 298 | /Density { 299 | /Fillden exch def 300 | currentrgbcolor 301 | /ColB exch def /ColG exch def /ColR exch def 302 | /ColR ColR Fillden mul Fillden sub 1 add def 303 | /ColG ColG Fillden mul Fillden sub 1 add def 304 | /ColB ColB Fillden mul Fillden sub 1 add def 305 | ColR ColG ColB setrgbcolor} def 306 | /BoxColFill {gsave Rec PolyFill} def 307 | /PolyFill {gsave Density fill grestore grestore} def 308 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def 309 | % 310 | % PostScript Level 1 Pattern Fill routine for rectangles 311 | % Usage: x y w h s a XX PatternFill 312 | % x,y = lower left corner of box to be filled 313 | % w,h = width and height of box 314 | % a = angle in degrees between lines and x-axis 315 | % XX = 0/1 for no/yes cross-hatch 316 | % 317 | /PatternFill {gsave /PFa [ 9 2 roll ] def 318 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate 319 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec 320 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 321 | clip 322 | currentlinewidth 0.5 mul setlinewidth 323 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def 324 | 0 0 M PFa 5 get rotate PFs -2 div dup translate 325 | 0 1 PFs PFa 4 get div 1 add floor cvi 326 | {PFa 4 get mul 0 M 0 PFs V} for 327 | 0 PFa 6 get ne { 328 | 0 1 PFs PFa 4 get div 1 add floor cvi 329 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for 330 | } if 331 | stroke grestore} def 332 | % 333 | /languagelevel where 334 | {pop languagelevel} {1} ifelse 335 | dup 2 lt 336 | {/InterpretLevel1 true def 337 | /InterpretLevel3 false def} 338 | {/InterpretLevel1 Level1 def 339 | 2 gt 340 | {/InterpretLevel3 Level3 def} 341 | {/InterpretLevel3 false def} 342 | ifelse } 343 | ifelse 344 | % 345 | % PostScript level 2 pattern fill definitions 346 | % 347 | /Level2PatternFill { 348 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} 349 | bind def 350 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def 351 | << Tile8x8 352 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 353 | >> matrix makepattern 354 | /Pat1 exch def 355 | << Tile8x8 356 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke 357 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} 358 | >> matrix makepattern 359 | /Pat2 exch def 360 | << Tile8x8 361 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L 362 | 8 8 L 8 0 L 0 0 L fill} 363 | >> matrix makepattern 364 | /Pat3 exch def 365 | << Tile8x8 366 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L 367 | 0 12 M 12 0 L stroke} 368 | >> matrix makepattern 369 | /Pat4 exch def 370 | << Tile8x8 371 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L 372 | 0 -4 M 12 8 L stroke} 373 | >> matrix makepattern 374 | /Pat5 exch def 375 | << Tile8x8 376 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L 377 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} 378 | >> matrix makepattern 379 | /Pat6 exch def 380 | << Tile8x8 381 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L 382 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} 383 | >> matrix makepattern 384 | /Pat7 exch def 385 | << Tile8x8 386 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L 387 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} 388 | >> matrix makepattern 389 | /Pat8 exch def 390 | << Tile8x8 391 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L 392 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} 393 | >> matrix makepattern 394 | /Pat9 exch def 395 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def 396 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def 397 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def 398 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def 399 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def 400 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def 401 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def 402 | } def 403 | % 404 | % 405 | %End of PostScript Level 2 code 406 | % 407 | /PatternBgnd { 408 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 409 | } def 410 | % 411 | % Substitute for Level 2 pattern fill codes with 412 | % grayscale if Level 2 support is not selected. 413 | % 414 | /Level1PatternFill { 415 | /Pattern1 {0.250 Density} bind def 416 | /Pattern2 {0.500 Density} bind def 417 | /Pattern3 {0.750 Density} bind def 418 | /Pattern4 {0.125 Density} bind def 419 | /Pattern5 {0.375 Density} bind def 420 | /Pattern6 {0.625 Density} bind def 421 | /Pattern7 {0.875 Density} bind def 422 | } def 423 | % 424 | % Now test for support of Level 2 code 425 | % 426 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse 427 | % 428 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont 429 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall 430 | currentdict end definefont pop 431 | % 432 | /MFshow { 433 | { dup 5 get 3 ge 434 | { 5 get 3 eq {gsave} {grestore} ifelse } 435 | {dup dup 0 get findfont exch 1 get scalefont setfont 436 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 437 | get exch 4 get {textshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq 438 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 439 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div 440 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get 441 | textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop 442 | pop aload pop M} ifelse }ifelse }ifelse } 443 | ifelse } 444 | forall} def 445 | /Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def 446 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } 447 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont 448 | 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def 449 | /MLshow { currentpoint stroke M 450 | 0 exch R 451 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 452 | /MRshow { currentpoint stroke M 453 | exch dup MFwidth neg 3 -1 roll R 454 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 455 | /MCshow { currentpoint stroke M 456 | exch dup MFwidth -2 div 3 -1 roll R 457 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def 458 | /XYsave { [( ) 1 2 true false 3 ()] } bind def 459 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def 460 | Level1 SuppressPDFMark or 461 | {} { 462 | /SDict 10 dict def 463 | systemdict /pdfmark known not { 464 | userdict /pdfmark systemdict /cleartomark get put 465 | } if 466 | SDict begin [ 467 | /Title (spec/tmp/histogram_plot.eps) 468 | /Subject (gnuplot plot) 469 | /Creator (gnuplot 5.0 patchlevel 5) 470 | % /Producer (gnuplot) 471 | % /Keywords () 472 | /CreationDate (Fri Nov 22 22:11:02 2019) 473 | /DOCINFO pdfmark 474 | end 475 | } ifelse 476 | % 477 | % Support for boxed text - Ethan A Merritt May 2005 478 | % 479 | /InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put 480 | userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put 481 | /Boxing true def } def 482 | /ExtendTextBox { Boxing 483 | { gsave dup false charpath pathbbox 484 | dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse 485 | dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse 486 | dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse 487 | dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse 488 | grestore } if } def 489 | /PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M 490 | TBx1 TBxmargin sub TBy2 TBymargin add L 491 | TBx2 TBxmargin add TBy2 TBymargin add L 492 | TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def 493 | /DrawTextBox { PopTextBox stroke /Boxing false def} def 494 | /FillTextBox { gsave PopTextBox 1 1 1 setrgbcolor fill grestore /Boxing false def} def 495 | 0 0 0 0 InitTextBox 496 | /TBxmargin 20 def 497 | /TBymargin 20 def 498 | /Boxing false def 499 | /textshow { ExtendTextBox Gshow } def 500 | % 501 | % redundant definitions for compatibility with prologue.ps older than 5.0.2 502 | /LTB {BL [] LCb DL} def 503 | /LTb {PL [] LCb DL} def 504 | end 505 | %%EndProlog 506 | %%Page: 1 1 507 | gnudict begin 508 | gsave 509 | doclip 510 | 50 50 translate 511 | 0.050 0.050 scale 512 | 0 setgray 513 | newpath 514 | (Helvetica) findfont 140 scalefont setfont 515 | BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if 516 | 1.000 UL 517 | LTb 518 | LCb setrgbcolor 519 | 686 448 M 520 | 63 0 V 521 | 6198 0 R 522 | -63 0 V 523 | stroke 524 | 602 448 M 525 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 526 | ] -46.7 MRshow 527 | 1.000 UL 528 | LTb 529 | LCb setrgbcolor 530 | 686 911 M 531 | 63 0 V 532 | 6198 0 R 533 | -63 0 V 534 | stroke 535 | 602 911 M 536 | [ [(Helvetica) 140.0 0.0 true true 0 ( 20)] 537 | ] -46.7 MRshow 538 | 1.000 UL 539 | LTb 540 | LCb setrgbcolor 541 | 686 1375 M 542 | 63 0 V 543 | 6198 0 R 544 | -63 0 V 545 | stroke 546 | 602 1375 M 547 | [ [(Helvetica) 140.0 0.0 true true 0 ( 40)] 548 | ] -46.7 MRshow 549 | 1.000 UL 550 | LTb 551 | LCb setrgbcolor 552 | 686 1838 M 553 | 63 0 V 554 | 6198 0 R 555 | -63 0 V 556 | stroke 557 | 602 1838 M 558 | [ [(Helvetica) 140.0 0.0 true true 0 ( 60)] 559 | ] -46.7 MRshow 560 | 1.000 UL 561 | LTb 562 | LCb setrgbcolor 563 | 686 2302 M 564 | 63 0 V 565 | 6198 0 R 566 | -63 0 V 567 | stroke 568 | 602 2302 M 569 | [ [(Helvetica) 140.0 0.0 true true 0 ( 80)] 570 | ] -46.7 MRshow 571 | 1.000 UL 572 | LTb 573 | LCb setrgbcolor 574 | 686 2765 M 575 | 63 0 V 576 | 6198 0 R 577 | -63 0 V 578 | stroke 579 | 602 2765 M 580 | [ [(Helvetica) 140.0 0.0 true true 0 ( 100)] 581 | ] -46.7 MRshow 582 | 1.000 UL 583 | LTb 584 | LCb setrgbcolor 585 | 686 3229 M 586 | 63 0 V 587 | 6198 0 R 588 | -63 0 V 589 | stroke 590 | 602 3229 M 591 | [ [(Helvetica) 140.0 0.0 true true 0 ( 120)] 592 | ] -46.7 MRshow 593 | 1.000 UL 594 | LTb 595 | LCb setrgbcolor 596 | 686 3692 M 597 | 63 0 V 598 | 6198 0 R 599 | -63 0 V 600 | stroke 601 | 602 3692 M 602 | [ [(Helvetica) 140.0 0.0 true true 0 ( 140)] 603 | ] -46.7 MRshow 604 | 1.000 UL 605 | LTb 606 | LCb setrgbcolor 607 | 686 4156 M 608 | 63 0 V 609 | 6198 0 R 610 | -63 0 V 611 | stroke 612 | 602 4156 M 613 | [ [(Helvetica) 140.0 0.0 true true 0 ( 160)] 614 | ] -46.7 MRshow 615 | 1.000 UL 616 | LTb 617 | LCb setrgbcolor 618 | 686 4619 M 619 | 63 0 V 620 | 6198 0 R 621 | -63 0 V 622 | stroke 623 | 602 4619 M 624 | [ [(Helvetica) 140.0 0.0 true true 0 ( 180)] 625 | ] -46.7 MRshow 626 | 1.000 UL 627 | LTb 628 | LCb setrgbcolor 629 | 686 448 M 630 | 0 63 V 631 | 0 4108 R 632 | 0 -63 V 633 | stroke 634 | 686 308 M 635 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.1)] 636 | ] -46.7 MCshow 637 | 1.000 UL 638 | LTb 639 | LCb setrgbcolor 640 | 1938 448 M 641 | 0 63 V 642 | 0 4108 R 643 | 0 -63 V 644 | stroke 645 | 1938 308 M 646 | [ [(Helvetica) 140.0 0.0 true true 0 (-0.05)] 647 | ] -46.7 MCshow 648 | 1.000 UL 649 | LTb 650 | LCb setrgbcolor 651 | 3190 448 M 652 | 0 63 V 653 | 0 4108 R 654 | 0 -63 V 655 | stroke 656 | 3190 308 M 657 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0)] 658 | ] -46.7 MCshow 659 | 1.000 UL 660 | LTb 661 | LCb setrgbcolor 662 | 4443 448 M 663 | 0 63 V 664 | 0 4108 R 665 | 0 -63 V 666 | stroke 667 | 4443 308 M 668 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.05)] 669 | ] -46.7 MCshow 670 | 1.000 UL 671 | LTb 672 | LCb setrgbcolor 673 | 5695 448 M 674 | 0 63 V 675 | 0 4108 R 676 | 0 -63 V 677 | stroke 678 | 5695 308 M 679 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.1)] 680 | ] -46.7 MCshow 681 | 1.000 UL 682 | LTb 683 | LCb setrgbcolor 684 | 6947 448 M 685 | 0 63 V 686 | 0 4108 R 687 | 0 -63 V 688 | stroke 689 | 6947 308 M 690 | [ [(Helvetica) 140.0 0.0 true true 0 ( 0.15)] 691 | ] -46.7 MCshow 692 | 1.000 UL 693 | LTb 694 | LCb setrgbcolor 695 | 1.000 UL 696 | LTB 697 | LCb setrgbcolor 698 | 686 4619 N 699 | 686 448 L 700 | 6261 0 V 701 | 0 4171 V 702 | -6261 0 V 703 | Z stroke 704 | 1.000 UP 705 | 1.000 UL 706 | LTb 707 | LCb setrgbcolor 708 | LCb setrgbcolor 709 | 112 2533 M 710 | currentpoint gsave translate -270 rotate 0 0 moveto 711 | [ [(Helvetica) 140.0 0.0 true true 0 (frequency)] 712 | ] -46.7 MCshow 713 | grestore 714 | LTb 715 | LCb setrgbcolor 716 | 3816 98 M 717 | [ [(Helvetica) 140.0 0.0 true true 0 (x)] 718 | ] -46.7 MCshow 719 | LTb 720 | LCb setrgbcolor 721 | 3816 4829 M 722 | [ [(Helvetica) 140.0 0.0 true true 0 (Histogram)] 723 | ] -46.7 MCshow 724 | % Begin plot #1 725 | 1.000 UL 726 | LTb 727 | LCb setrgbcolor 728 | LCb setrgbcolor 729 | 6296 4486 M 730 | [ [(Helvetica) 140.0 0.0 true true 0 (smooth frequency)] 731 | ] -46.7 MRshow 732 | 1.000 UL 733 | LTb 734 | LCb setrgbcolor 735 | 6380 4451 N 736 | 399 0 V 737 | 0 70 V 738 | -399 0 V 739 | 0 -70 V 740 | Z stroke 741 | 811 448 N 742 | 0 371 V 743 | 251 0 V 744 | 0 -371 V 745 | -251 0 V 746 | Z stroke 747 | 1062 448 N 748 | 0 209 V 749 | 250 0 V 750 | 0 -209 V 751 | -250 0 V 752 | Z stroke 753 | 1312 448 N 754 | 0 301 V 755 | 251 0 V 756 | 0 -301 V 757 | -251 0 V 758 | Z stroke 759 | 1563 448 N 760 | 0 255 V 761 | 250 0 V 762 | 0 -255 V 763 | -250 0 V 764 | Z stroke 765 | 1813 448 N 766 | 0 116 V 767 | 250 0 V 768 | 0 -116 V 769 | -250 0 V 770 | Z stroke 771 | 2063 448 N 772 | 0 209 V 773 | 251 0 V 774 | 0 -209 V 775 | -251 0 V 776 | Z stroke 777 | 2314 448 N 778 | 0 487 V 779 | 250 0 V 780 | 0 -487 V 781 | -250 0 V 782 | Z stroke 783 | 2564 448 N 784 | 0 417 V 785 | 251 0 V 786 | 0 -417 V 787 | -251 0 V 788 | Z stroke 789 | 2815 448 N 790 | 0 602 V 791 | 250 0 V 792 | 0 -602 V 793 | -250 0 V 794 | Z stroke 795 | 3065 448 N 796 | 0 3754 V 797 | 251 0 V 798 | 0 -3754 V 799 | -251 0 V 800 | Z stroke 801 | 3316 448 N 802 | 0 742 V 803 | 250 0 V 804 | 0 -742 V 805 | -250 0 V 806 | Z stroke 807 | 3566 448 N 808 | 0 440 V 809 | 251 0 V 810 | 0 -440 V 811 | -251 0 V 812 | Z stroke 813 | 3817 448 N 814 | 0 417 V 815 | 250 0 V 816 | 0 -417 V 817 | -250 0 V 818 | Z stroke 819 | 4067 448 N 820 | 0 301 V 821 | 250 0 V 822 | 0 -301 V 823 | -250 0 V 824 | Z stroke 825 | 4317 448 N 826 | 0 324 V 827 | 251 0 V 828 | 0 -324 V 829 | -251 0 V 830 | Z stroke 831 | 4568 448 N 832 | 0 278 V 833 | 250 0 V 834 | 0 -278 V 835 | -250 0 V 836 | Z stroke 837 | 4818 448 N 838 | 0 348 V 839 | 251 0 V 840 | 0 -348 V 841 | -251 0 V 842 | Z stroke 843 | 5069 448 N 844 | 0 394 V 845 | 250 0 V 846 | 0 -394 V 847 | -250 0 V 848 | Z stroke 849 | 5319 448 N 850 | 0 348 V 851 | 251 0 V 852 | 0 -348 V 853 | -251 0 V 854 | Z stroke 855 | 5570 448 N 856 | 0 463 V 857 | 250 0 V 858 | 0 -463 V 859 | -250 0 V 860 | Z stroke 861 | 5820 448 N 862 | 0 834 V 863 | 125 0 V 864 | 0 -834 V 865 | -125 0 V 866 | Z stroke 867 | % End plot #1 868 | 2.000 UL 869 | LTb 870 | LCb setrgbcolor 871 | 1.000 UL 872 | LTB 873 | LCb setrgbcolor 874 | 686 4619 N 875 | 686 448 L 876 | 6261 0 V 877 | 0 4171 V 878 | -6261 0 V 879 | Z stroke 880 | 1.000 UP 881 | 1.000 UL 882 | LTb 883 | LCb setrgbcolor 884 | stroke 885 | grestore 886 | end 887 | showpage 888 | %%Trailer 889 | %%DocumentFonts: Helvetica 890 | --------------------------------------------------------------------------------