2014-02-22 41 views
1

我想根據y軸上的數據集的以下內容對圖中的線着色。基於數據的某些屬性的matplotlib plt中的多色圖

if data > 0: 
    color = 'r' 
if data = 0: 
    color = 'g' 
if data < 0: 
    color = 'b' 

不幸的是我只知道如何顏色在整個數據集的一種顏色。我在網上也找不到任何東西。我假設有一種方法可以在每次顏色改變時不破壞數據集的情況下做到這一點。

下面是隻用一個彩色繪製的數據的一個例子。

import matplotlib.pyplot as plt 
import numpy as np 

# Simple data 
x = np.linspace(0, 2 * np.pi, 400) 
data = np.sin(x ** 2) 

#plot 
f, ax = plt.subplots() 
ax.plot(x, data, color='r') 

plt.show() 
+0

可能的重複http://stackoverflow.com/questions/19119165/changing-line-color 或 http://stackoverflow.com/questions/17240694/python-how-to-plot-one-line- in-different-colors –

回答

2

color參數實際上可以將一個列表作爲參數。例如,下面是建立基於數據是正的還是負的顏色列表一個簡單的代碼位:

colors = [] 
for item in data: 
    if item < 0: 
     colors.append('r') 
    else: 
     colors.append('g') 

後來乾脆:

ax.bar(x, data, color=colors) 

編輯:所以我測試了,看來我的答案只適用於條形圖。我無法在matplotlib文檔中找到任何似乎表明使用多種顏色爲線條圖着色的東西。我確實發現了this site,我相信它有你想要的信息。那裏的人定義了他自己的功能來實現它。

在使用我的鏈接文件,這裏是一個線圖等同版本:

cmap = ListedColormap(['r', 'g']) # use the colors red and green 
norm = BoundaryNorm([-1000,0,1000], cmap.N) # map red to negative and green to positive 
              # this may work with just 0 in the list 
fig, axes = plt.subplots() 
colorline(x, data, data, cmap=cmap, norm=norm) 

plt.xlim(x.min(), x.max()) 
plt.ylim(data.min(), data.max()) 

plt.show() 

最後三個colorline的論點在這裏告訴它的顏色數據以及如何映射它。

+0

當我嘗試這個時,我得到一個巨大的錯誤,我試着用2.7和3.3,我複製代碼和錯誤在這裏http://pastebin.com/5DzfHRpb – pyCthon

+0

@pyCthon對不起。我原來的答案只適用於條形圖。我已經對它進行了更新,以包括我發現的有關線形圖的相關信息。 – user3030010

+0

謝謝!那是來自某個鏈接的鏈接 – pyCthon