为图形刻度定义和使用向量

时间:2015-10-22 12:10:06

标签: gnuplot post-processing

我喜欢将所有内容存储在一个变量中,因为我制作的每个gnuplot脚本会一次生成数十个绘图,这样可以更容易地跟踪。以下是一个图表(感兴趣的变量:ytics)的示例:

# Setup style
set terminal pngcairo dashed
unset key
set style line 1 pointtype 7 pointsize 0.3 linecolor rgb "black"

# Setup the plots' ytics
ytics_H2 = (0,0.002,0.004,0.006,0.008,0.010,0.012);

# Store the range for each variable
min_T  = 200; max_T  = 1800;
min_H2 = 0;   max_H2 = 0.012;



# Plot
set output 'my_output_H2.png'
set ytics ytics_H2
set xrange [min_T :max_T ]
set yrange [min_H2:max_H2]
plot 'scatter.dat' using 1:2 with points linestyle 1

结果如下: enter image description here

如您所见,只打印最后一个刻度。如果我将变量ytics替换为它所设置的向量,那么一切都按预期工作。

2 个答案:

答案 0 :(得分:1)

对于这种用例,gnuplot有宏:

set macros # necessary only for v < 5.0
ytics = "(1, 5, 8)"
set ytics @ytics
plot x

Script output with gnuplot 5.0

为了使用宏,您必须定义一个字符串变量,其中包含您稍后要使用的命令部分,此处为ytics = "(1, 5, 8)"。稍后您可以将其内容与@ytics一起使用。

这里的重要事实是,gnuplot首先将@ytics替换为字符串变量ytics的内容,即将set ytics @ytics扩展为set ytics (1, 5, 5)然后才执行整个命令。

答案 1 :(得分:0)

由于您的时间间隔是固定的并且相同,您也可以使用import java.util.HashMap; import java.util.HashSet; import java.util.Set; public class TrackMap<K, V> extends HashMap<K,V>{ private static final long serialVersionUID = 1L; Set<Object> usedKeys = new HashSet<>(); @Override public V get(Object key) { usedKeys.add(key); return super.get(key); } public Set<Object> getUsedKeys() { return usedKeys; } public static void main(String[] args) { TrackMap<Integer, String> test = new TrackMap<>(); for(int i = 0;i<100;++i) { test.put(i, Integer.toString(i)); } System.out.println(test.get(5)); System.out.println(test.get(10)); System.out.println(test.get(15)); System.out.println(test.get(17)); System.out.println(test.get("what?")); for(Object i : test.getUsedKeys()) { System.out.println("The key " + i + " was accessed"); } } } 形式:

start, incr, end