2016-11-03 19 views
1

Matplotlibを使用して(モジュールに入れる)多数のプロット関数を作成しています。異なる機能は異なるタイプのプロットを指します。プロットタイプに応じて異なる「スタイルシート」(線、マーカー、軸などの異なる設定)を使用したいと思います。 しかし、プロット関数内からpyplot.style.use()関数を使用して定義済みのMatplotlibスタイルを設定しようとすると、問題が発生します。メインスクリプトでそれを設定すると動作しますが、別のプロットに対して異なるスタイルを使用することはできません。関数内でプロットスタイルシートを変更する

ので、このコードは以下のないRCパラメータの設定は、関数呼び出し後に変更されているが、私はPythonの変化の中から、再びそのスクリプトを実行している、、、しかし

# A plot function 
def my_plot(ax, xd, yd): 
    '''Create a plot''' 

    ax.scatter(xd, yd) 

# Main Script 
import numpy as np 
import matplotlib.pyplot as plt 

# Set plot style sheet in main script 
plt.style.use('ggplot') 

fig, ax = plt.subplots(1) 

x = np.arange(1, 101) 
y = 20 + 3 * x + np.random.normal(0, 60, 100) 

sc = my_plot(ax, x, y) 

plt.show() 

をしたいとスタイルを設定しますそれに応じて図形のスタイル。

# A plot function 
def my_plot(ax, xd, yd): 
    '''Create a plot''' 

    # Set plot style sheet in function 
    plt.style.use('ggplot') 

    ax.scatter(xd, yd) 

# Main Script 
import numpy as np 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots(1) 

x = np.arange(1, 101) 
y = 20 + 3 * x + np.random.normal(0, 60, 100) 

sc = my_plot(ax, x, y) 

plt.show() 

答えて

3

あなたの関数内でtemporary stylingを使用することができます。それが唯一のブロック内にあるものにスタイルを適用するため

with plt.style.context(('ggplot')): 
    ax.scatter(xd, yd) 

これは、軸の線幅を変更しません。軸(たとえば線幅)をスタイルするには、subplotsコールの前にスタイルシートをuse(最初の例のように)にするか、一時的なスタイルでラップします。

私が知る限り、既に作成されたオブジェクトにはスタイルシートを遡及適用することはできません。これを行うには、変更するプロパティをループして明示的に設定する必要があります。

関連する問題