2013-11-23 176 views
4

我試圖使用matplotlib的工具複製所附圖的樣式。根據matplotlib中的y值更改曲線的顏色

Curves whose colour change with height

基本上,我希望根據使用matplotlib其y值來改變曲線的顏色。

+0

目前還不清楚什麼套在你的榜樣的顏色。必須有第三個值,因爲顏色顯然不是由'c \ tau/R_0'和'kR_0'的值設置的。 – askewchan

+0

有關更多信息,請參見[具有線顏色隨matplotlib線圖的數據索引變化?](http://stackoverflow.com/questions/13972287/having-line-color-vary-with-data-index-for- line-graph-in-matplotlib) – askewchan

回答

7

您顯示的圖沒有繪圖的垂直軸設置的顏色(這是我認爲的y值)。相反,它只有8個不同的地塊疊加,每個都有不同的顏色,沒有說明顏色的含義。

這裏是一個看起來像你的陰謀的東西的例子:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import cm 

# some fake data: 
x = np.linspace(0, 2*np.pi, 1000) 
fs = np.arange(1, 5.) 
ys = np.sin(x*fs[:, None]) 

for y, f in zip(ys, fs): 
    plt.plot(x, y, lw=3, c=cm.hot(f/5)) 

colors

如果你真的想要一個線條的顏色相對於它的價值變化,你要那種黑客攻擊它,因爲任何給定的Line2D對象只能有一種顏色,據我所知。一種方法是做一個散點圖,每個點可以有任何顏色。

x = np.linspace(0, 2*np.pi, 1000) 
y = np.sin(2*x) 
plt.scatter(x,y, c=cm.hot(np.abs(y)), edgecolor='none') 

注:

  • 顏色矢量應該01之間的範圍,因此,如果y.max() > 1,然後將它規範化:c=cm.hot(y/y.max()),並確保它的所有積極的。
  • 我使用edgecolor='none',因爲默認情況下,scatter標記具有黑色輪廓,這使得它看起來不像統一線。
  • 如果您的數據間隔太遠,如果您不需要標記之間的空白,則必須插入數據。

more colors

+1

你是對的。然而,忘記情節,你是否知道如何根據垂直軸上的位置改變線的顏色? –

+0

在matplotlib中,一行對象不能有多種顏色。對於你想要的最好的近似是做一個散點圖,其中的顏色由與y數組相同的值設置。我會盡快編輯我的答案,舉一個例子。 – askewchan