2012-04-20 69 views
2

LCRメーターを制御するプログラムを作成しています(詳細は重要ではありません)。matplotlibをネストされたwhileループで複数のプロット

while x <= stopFrequency: 
    y = startVoltage 
    while y <= stopVoltage: 
     getCapacity = y * 2 
     y += stepValueVoltage 
    x += stepValueFrequency 

は、今私はygetCapacityの異なる周波数の(外側のループ)のためのプロットを行う必要があります。したがって、私は2つの入れ子whileループ(簡単な例)が必要です。 1つの周波数に対してygetCapacityのプロットを得ることができます。しかし、さらに、私はどのようにグラフを1つのプロットで得るのか分かりません。

答えて

3

複数のプロット(「グラフ」)を同じ軸(「プロット」)に配置するには、プロットごとにplt.plotを1回呼び出します。

import matplotlib.pyplot as plt 
import itertools 
markers = itertools.cycle([ '+', '*', ',', 'o', '.', '1', 'p', ]) 
while x <= stopFrequency: 
    y = startVoltage 
    ys = [] 
    vals = [] 
    while y <= stopVoltage: 
     ys.append(y) 
     vals.append(getCapacity) 
     getCapacity = y * 2 
     y += stepValueVoltage 
    plt.plot(ys, vals, 
      label = 'x: {0}'.format(x), 
      marker = next(markers)) 
    x += stepValueFrequency 
plt.legend(loc = 'best') 
plt.show() 
+0

ありがとうございました!それはまさに私が必要なものです。私はあなたとほぼ同じコードを持っていましたが、私は最初の前にys = []とvals = []を置いていました。それは間違った動きでした:-) Txは私が知らなかったラベルフォーマットでもあります! – VeVi

+0

もう少し小さな質問があるかもしれません。ここでは.formatを使用します。現在、すべてのプロットに別の色があります。また、別のラインジャンル(破線や円など)を持たせるコマンドもありますか? – VeVi

+0

各プロットに異なるマーカーを割り当てる方法を示すコードをいくつか追加しました。 'marker '変数を再定義することによって使用される特定のマーカーを変更することができます。利用可能な選択肢は、[ここに文書化されています](http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.plot)と[この例](http://matplotlib.sourceforge.net/examples/pylab_examples /line_styles.html#pylab-examples-line-styles)は、LaTeX文字をマーカーとして使用する方法を示しています。私はあなたが必要なマーカーがどれくらいあるか分からないので、私はマーカーをサイクル無限にするために 'itertools.cycle'を使いました。 – unutbu

関連する問題