2016-05-30 12 views
5

Próbuję wykreślić wartości hsv przy użyciu imshow w matplotlib. Problem polega na tym, że metoda, z której korzystam, zwraca krotkę z trzema wartościami zgodnie z oczekiwaniami dla hsv, ale imshow interpretuje to jako rgb. Czy istnieje sposób informowania o wartościach imshow?Wykreślanie wartości hsv za pomocą imshow

Oto mój kod:

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.colors as mcolors 


def G(x, y): 
    s = x + 1j*y 
    return (s+2)/(s**2 + s + 1) 

x = np.linspace(-3, 3, 1000) 
y = np.linspace(-3, 3, 1000) 

xx, yy = np.meshgrid(x, y) 
norm = mcolors.Normalize() 
zz = G(xx, yy) 
phase = np.angle(zz) 
mag = np.abs(zz) 

# color converter 
c = mcolors.ColorConverter().to_rgb 

# Custom rgb Colormap 
rgb = make_colormap(
    [c('red'), c('yellow'), 0.33, c('yellow'), c('green'), c('cyan'), 0.5, c('cyan'), 
    c('blue'), c('magenta'), 0.833, c('magenta'), c('red')]) 

# Turn data points into rgb values 
z_data_rgb = rgb(norm(phase)) 
# normalizing the intensity values 
intensity = norm(mag) 

# defining light source 
ls = mcolors.LightSource() 

# plotting 
plt.imshow(ls.blend_hsv(z_data_rgb, intensity), extent=[-3, 3, -3, 3]) 
plt.show() 

uzyskać następujące działki: enter image description here

Jeśli to działało poprawnie pewne obszary na wykresie powinny mieć mniejsze nasycenie niż inne oparte na wartościach intensywności.

Dzięki

Odpowiedz

6

Dlaczego nie skorzystać hsv_to_rgb i wykreślić z rgb kolorach?

from matplotlib.colors import hsv_to_rgb 
rgb = hsv_to_rgb(hsv) 
Powiązane problemy