2012-05-14 51 views
2

大小固定,透明圖形從該開始:連續型,在gnuplot的

#!/usr/bin/env python 
from numpy import * 
import Gnuplot as gp 
import Gnuplot.funcutils 

x = (1,2,3) 
y=(2,4,5) 
g = gp.Gnuplot() 
d = gp.Data(x,y,with_="lines",title='Graph') 
g.plot(d) 
g('set size 200,100') 
g.output('filename.svg') 

我想獲得的曲線圖至極點被連接到線,尺寸固定的和透明的。 建議?

在此先感謝 FB

+0

你是什麼意思「尺寸固定」?什麼應該是「透明」(線,點)? – mgilson

回答

0

我從來沒有進口的gnuplot到蟒蛇,但在gnuplot的貝殼我不喜歡這樣,當我想在情節其他行:

set arrow from 1,2 to 2,4 nohead lw 2 
    set arrow from 2,4 to 3,5 nohead lw 2 

使用未設置箭頭再次移除它們。你的行g('set size 200,100')表明你可以將行傳遞給gnuplot來做到這一點。

運行代碼時的結果是什麼?難道你沒有得到數據繪製和連接線? 我不知道你的意思是維度固定和透明。

+0

對於多行文件,這很快就會變得很麻煩......爲什麼不把文件中的座標放在一個文件中,並用線條和點再繪製 - 或者(也許更好)用線條點? – mgilson

+0

linespoints聽起來像他想要的,繪圖兩次可以在代碼中工作,如d2 = gp.Data(x,y,with _ =「points」,title =「data」) g.plot(d,d2)。設置箭頭是在任意點之間添加連接,但不好連接數據系列的點 – Schuh

+0

@mgilson我閱讀了有關linespoints的內容,但是如何使用它? 我上面編碼的只是一個腳本的一小部分,它必須「實時」工作。放置一些座標,得到它們(必要的,因爲我需要它們在不同的代碼點),可能會增加圖表計算的延遲。 – FrankBr

1

首先,刪除g('set size 200,100')。這個命令基本上告訴gnuplot在x方向上做比正常大200倍而在y方向上大100倍的繪圖 - 當你繪製它時,它將是巨大的,或者你只會實際獲得在角落看到一小部分情節(你可能看不到任何東西)。

接下來,這裏就是我會完成你想要的純gnuplot的(我認爲 - 測試它,看看我確實正確地解釋你的要求):

set terminal svg size 200,100 
set output "filename.svg" 
plot '-' w linespoints linestyle 1 pointtype 7 #just picked some linestyles and pointtypes... 
    1 2 
    2 4 
    3 5 
    e 

爲了把這個成的gnuplot -py,你可以用g('...')來包裝它 - 這是一個相當醜陋的方法,但它應該工作。我不知道gnuplot-py認爲什麼是有效的情節類型以及它不能識別什麼......你可能不得不深入挖掘源代碼。我也使用過「內聯數據」,但是你可以很容易地將你的觀點寫到一個臨時文件中(使用tempfile模塊和情節,如果那更容易)。

好像d = gp.Data(x,y,with_="linespoints",title="data")應該工作,但我並沒有承諾......

我的猜測也將是g.output('filename.svg',terminal='svg',size="200,100")可能的工作,但我從來沒有真正喜歡的gnuplot-PY,因爲它似乎並沒有表現的我認爲它應該。如果這不起作用,您需要在繪圖之前使用g('...')。

總之,如果你嘗試這樣會發生什麼?

#!/usr/bin/env python 
from numpy import * 
import Gnuplot as gp 
import Gnuplot.funcutils 

x = (1,2,3) 
y=(2,4,5) 
g = gp.Gnuplot() 
d = gp.Data(x,y,with_="linespoints",title='Graph') 
g("set terminal svg size 200,100") 
g("set output 'filename.svg'") 
g.plot(d) 
+0

完美,它像我想要的那樣工作。 現在,爲了讓它透明(我想只是圖形,沒有白色背景),我該怎麼辦? 我嘗試設置另一個屬性: 'g(「set transparent」)'但我得到: '無法識別的選項。請參閱'幫助集'。' 第二,您可以「報告」我一個很好的指導,我可以按照自定義我的圖表? (我想使用subplots或至少各種多個數據圖) – FrankBr

+0

我的.pngs通常變成透明的,如果我有gnuplot創建.eps,然後我使用convert convert.eps -rotate 90 output.png'(它通常會爲我旋轉)。 – andyras

+0

@FrankBr:默認情況下,一些終端會給你透明的圖。 'eps','ps','svg'都默認做透明背景。爲了得到一個透明的png,你可以根據註釋中的andyras推薦轉換,或者,如果你的gnuplot支持它,你可以使用'set term pngcairo transparent'(而不是上面的'set terminal svg')。就定製而言,這取決於你想要做什麼。爲了在一個圖上放置多個圖形,gnuplot提供'set multiplot'。在一張圖上放多條線,就有'replot'。 – mgilson