使用 imshow 绘制 hsv 值
Plotting hsv values with imshow
我正在尝试使用 matplotlib
中的 imshow
绘制 hsv
值。问题是我使用的方法 returns 具有三个值的元组,正如 hsv
预期的那样,但 imshow
将其解释为 rgb
。有没有办法告诉 imshow
这些值是 hsv
值?
这是我的代码:
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()
我得到以下情节:
如果它工作正常,根据强度值,图中某些区域的饱和度应该低于其他区域。
谢谢
为什么不使用 hsv_to_rgb
并使用 rgb
颜色绘图?
from matplotlib.colors import hsv_to_rgb
rgb = hsv_to_rgb(hsv)
我正在尝试使用 matplotlib
中的 imshow
绘制 hsv
值。问题是我使用的方法 returns 具有三个值的元组,正如 hsv
预期的那样,但 imshow
将其解释为 rgb
。有没有办法告诉 imshow
这些值是 hsv
值?
这是我的代码:
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()
我得到以下情节:
如果它工作正常,根据强度值,图中某些区域的饱和度应该低于其他区域。
谢谢
为什么不使用 hsv_to_rgb
并使用 rgb
颜色绘图?
from matplotlib.colors import hsv_to_rgb
rgb = hsv_to_rgb(hsv)