2012-08-05 49 views
1

我有兩個數字,每個都有3個子圖。在每個子圖中,通過使用for循環,有20個不同的曲線,代表20個步驟。我怎樣才能讓曲線的顏色漸漸淡出?就像我在下面的代碼中那樣,頂部子圖(311)有20條藍色曲線......我如何讓第一步變爲深藍色並讓藍色逐漸消失,直到最後一步變爲淡藍色?另外,我該如何讓這兩個數字一起在屏幕上彈出?現在,我必須手動關閉第一個數字才能彈出第二個數字。如何使線圖中的顏色淡入淡出matplotlib和python

from pylab import * 
for raw_step in raw: 
    raw_step = zip(*raw_step) 
    Raw_Vertex, Raw_KI, Raw_KII, Raw_KIII = raw_step[0], raw_step[1], raw_step[2], raw_step[3] 

    subplot(311) 
    plot(Raw_Vertex, Raw_KI, 'bo-') 
    grid(True) 
    title('Raw SIFs') 
    ylabel('K_I') 

    subplot(312) 
    plot(Raw_Vertex, Raw_KII, 'go-') 
    grid(True) 
    ylabel('K_II') 

    subplot(313) 
    plot(Raw_Vertex, Raw_KIII, 'ro-') 
    grid(True) 
    xlabel('Vertex') 
    ylabel('K_III') 

show() 


for mls_step in mls: 
    mls_step = zip(*mls_step) 
    MLS_Vertex, MLS_KI, MLS_KII, MLS_KIII = mls_step[0], mls_step[1], mls_step[2], mls_step[3] 

    subplot(311) 
    plot(MLS_Vertex, MLS_KI, 'bo-') 
    grid(True) 
    title('MLS SIFs') 
    ylabel('K_I') 

    subplot(312) 
    plot(MLS_Vertex, MLS_KII, 'go-') 
    grid(True) 
    ylabel('K_II') 

    subplot(313) 
    plot(MLS_Vertex, MLS_KIII, 'ro-') 
    grid(True) 
    xlabel('Vertex') 
    ylabel('K_III') 

show() 

回答

9

要獲得的藍色色調淡化,使用

blues = plt.get_cmap('Blues') # this returns a colormap 
color = blues(1 - float(i)/(len(raw)-1)) # blues(x) returns a color for each x between 0.0 and 1.0 

要放置次要情節並排側,使用fig.add_subplots(row, columns, n)定義6軸。

fig = plt.figure() 
ax[1] = fig.add_subplot(3, 2, 1) # 3x2 grid, 1st plot 
... 
ax[6] = fig.add_subplot(3, 2, 6) # 3x2 grid, 6th plot 

import matplotlib.pyplot as plt 
import numpy as np 

raw = range(20) 
mls = range(20) 
ax = {} 
blues = plt.get_cmap('Blues') 
reds = plt.get_cmap('Reds') 
greens = plt.get_cmap('Greens') 

fig = plt.figure() 

ax[1] = fig.add_subplot(3, 2, 1) 
ax[1].set_title('Raw SIFs') 
ax[1].grid(True) 
ax[1].set_ylabel('K_I') 

ax[3] = fig.add_subplot(3, 2, 3) 
ax[3].grid(True) 
ax[3].set_ylabel('K_II') 

ax[5] = fig.add_subplot(3, 2, 5) 
ax[5].grid(True) 
ax[5].set_xlabel('Vertex') 
ax[5].set_ylabel('K_III') 

ax[2] = fig.add_subplot(3, 2, 2) 
ax[2].set_title('MLS SIFs') 
ax[2].grid(True) 
ax[2].set_ylabel('K_I') 

ax[4] = fig.add_subplot(3, 2, 4) 
ax[4].grid(True) 
ax[4].set_ylabel('K_II') 

ax[6] = fig.add_subplot(3, 2, 6) 
ax[6].grid(True) 
ax[6].set_xlabel('Vertex') 
ax[6].set_ylabel('K_III') 

for i, raw_step in enumerate(raw): 
    Raw_Vertex = np.arange(10) 
    Raw_KI = Raw_Vertex*(i+1) 
    Raw_KII = Raw_Vertex*(i+1) 
    Raw_KIII = Raw_Vertex*(i+1) 
    ax[1].plot(Raw_Vertex, Raw_KI, 'o-', color = blues(1 - float(i)/(len(raw)-1))) 
    ax[3].plot(Raw_Vertex, Raw_KII, 'o-', color = greens(1 - float(i)/(len(raw)-1))) 
    ax[5].plot(Raw_Vertex, Raw_KIII, 'o-', color = reds(1 - float(i)/(len(raw)-1))) 

for i, mls_step in enumerate(mls): 
    MLS_Vertex = np.arange(10) 
    MLS_KI = MLS_Vertex**2*(i+1) 
    MLS_KII = MLS_Vertex**2*(i+1) 
    MLS_KIII = Raw_Vertex**2*(i+1) 

    ax[2].plot(MLS_Vertex, MLS_KI, 'o-', color = blues(1 - float(i)/(len(mls)-1))) 
    ax[4].plot(MLS_Vertex, MLS_KII, 'o-', color = greens(1 - float(i)/(len(mls)-1))) 
    ax[6].plot(MLS_Vertex, MLS_KIII, 'o-', color = reds(1 - float(i)/(len(mls)-1))) 

plt.show() 

enter image description here

+0

謝謝!!!!!!! – user1539217 2012-08-06 00:46:15

+0

@ user1539217不要忘記上/接受有用的答案。 – moooeeeep 2012-08-06 06:43:00

3

如果你想要更多的靈活性與您的色彩選擇,那麼我會使用colorsys建議;

它具有一些非常有用的功能,用於在不同的顏色映射之間進行轉換; http://en.wikipedia.org/wiki/HSL_and_HSV,它可以給你更多的靈活性。

http://docs.python.org/library/colorsys.html

,你可以使用它像這樣:

ax[1].plot(Raw_Vertex, Raw_KI, 'o-', color =colorsys.hsv_to_rgb(0,1-i/float(curves),1)) 

這很容易亮度,黑暗,顏色會發生變化,以任何你想要的,一個更直觀的方式。 enter image description here

+0

+1對於colorsys – bmu 2012-10-16 13:25:43