2017-01-23 7 views
1

私のpythonプログラムでは、それぞれに3つの曲線ファミリがあります。海軍のカラーパレットを割り当てて、それらをすべて1つのプロットにプロットします。1つのプロット内で異なる海底のパレットを持つ曲線のファミリー

これまでのところ私の解決策は次のコードです。

sns.set_style('whitegrid') 
volt = np.zeros(N) 
states = np.zeros([6,N]) 

for k in range(1,4): 
    if k == 1: 
     sns.set_palette('Blues_d',6) 
    if k == 2: 
     sns.set_palette('BuGn_d',6) 
    if k == 3: 
     sns.set_palette('Oranges_d',6) 

    for i in range(N): 
     j = -1 + 2*float(i)/N 
     volt[i] = j*(mu[1]-mu[0]) 
     state = evolve(s, ss, PP, beta, float(k) * D/3, B, j * mu, tmax) 

     for j in range(6): 
      states[j,i] = state[j] 

    for i in range(6): 
     y = np.zeros(N) 

     for j in range(N): 
      y[j] = states[i,j] 
     plt.plot(volt,y) 

plt.show() 

ただし、プロットは常に最初のパレット 'Blues_d'に表示されて終了します。どのようにコードを変更すれば、最初の曲線群は 'Blues_d'でプロットされ、2番目は 'BuGn_d'で3番目は 'Oranges_d'で、同じ数字でプロットされますか?

答えて

2

私はこれがあなたの質問に直接答えるわけではないことを認識していますが(部分的にはあなたのコードは最低限の動作例ではありません)、もしあなたがseabornを使用しているのであれば、あなたのデータはpandasです。 seabornの多くは、pandasと書かれているので、2つのジブは本当にうまくいきます。複数のカラーパレットでプロットすると、その一例で、

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns; sns.set_style('whitegrid') 

x = np.linspace(0, 3, 31) 

U_df = pd.DataFrame({ 
    'u1': 2.6*x**2 - 4.5, 
    'u2': 2.5*x**2 - 4.9, 
    'u3': 2.3*x**2 - 4.7}, index=x) 

V_df = pd.DataFrame({ 
    'v1': -5.1*x + 11, 
    'v2': -4.9*x + 10, 
    'v3': -5.5*x + 12}, index=x) 

W_df = pd.DataFrame({ 
    'w1': -6.5*(x-1.6)**2 + 9.1, 
    'w2': -6.2*(x-1.8)**2 + 9.5, 
    'w3': -6.1*(x-1.5)**2 + 9.7}, index=x) 

fig, ax = plt.subplots() 

U_df.plot(ax=ax, color=sns.color_palette('Blues_d', 3)) 
V_df.plot(ax=ax, color=sns.color_palette('BuGn_d', 3)) 
W_df.plot(ax=ax, color=sns.color_palette('Oranges_d', 3)) 

ax.legend(ncol=3, loc='best') 

enter image description here

+0

はあなたにたくさんありがとうございました!私は今あなたの方法を使用して私の問題の解決策を見つけました。 –

+0

@ThomasWening素晴らしい!あなたの問題を解決した場合は、自分の答えを正しいとマークしたり、それを上書きすることを検討することができます。 – lanery

0

How to use multiple colormaps in seaborn on same plotが有効です。 mwaskomからの回答を試してみてください。

ある
pal1 = sns.color_palette('rainbow', sum(ix1)) 
pal2 = sns.color_palette('coolwarm', sum(ix2)) 

fig, ax = plt.subplots(figsize=(4, 4)) 
ax.scatter(x_data[ix1], y[ix1], c=pal1, s=60, label="smaller") 
ax.scatter(x_data[ix2], y[ix2], c=pal2, s=60, label="larger") 
ax.legend(loc="lower right", scatterpoints=5) 

、 は、パレットを抽出し、プロット関数に渡します。 これは便利ですか?

関連する問題