2014-03-30 38 views
2

我有很多系列繪製在一個繪圖中。我想根據一系列的數量來決定情節風格/類型。下面是我瞄準的示例代碼:GNUPLOT:如何使用函數來決定繪圖樣式

title(i)=value(sprintf("title%i",i)) 
title1='x' 
title2='x^2' 
title3='x^3' 
... 

with(i)=value(sprintf("with%i",i)) 
with1='lines' 
with2='points' 
with3='boxes' 
... 

plot for [i=1:100] '-' title title(i) with with(i) 

我測試了title()函數的工作原理。但with函數無法正常工作。

你能幫我修復代碼嗎?

或者您認爲還有其他方法可以實現我的目標嗎?

+0

我嘗試了幾種方法,但沒有成功。通常你需要一個用於這種替換的宏:'set macros; style ='with boxes';繪製x @ style'。但在你的情況下,這不起作用,因爲宏使用字符串變量(這裏是'style'),但不能與函數一起使用。我想,你需要用外部工具生成整個腳本... – Christoph

+0

雖然,那麼似乎不可能呢?是否可以通過使用多個圖來繞過障礙物?是否可以在plot命令之前設置with類型?例如用xxxx設置;情節yyyyy; @Christoph –

+0

是的,你可以使用'設置風格的數據線'和類似的。所以你可以使用'eval'('set style data'.with(3))',但是對於多標題,你會遇到問題。 – Christoph

回答

1

有可能建立一個繪圖命令的字符串,然後運行這個字符串:

p="plot x linewidth 1" 
do for [i=1:10]{ 
    p=p.sprintf(", x+%d linewidth %d", i, i+1) 
} 


print p 

eval(p) 

打印命令的輸出是:

plot x linewidth 1, x+1 linewidth 2, x+2 linewidth 3, ... 

,這是導致情節:

根據你最終想要的, s可能適合你:

do for [i=1:10]{ 
    p=p.(i==1 ? "'myData.csv' with lines" : "") 
    p=p.(i==2 ? "'myData.csv' with steps" : "") 
    ... 

} 

但是,這看起來很醜陋。