如何修复极地RGB imshow的xticks?

时间:2014-02-21 13:33:17

标签: python matplotlib

此代码:

def complex_to_rgb(complex_data, invert=False):
  from numpy import angle, max, pi, sin, zeros
  phase = angle(complex_data)
  amplitude = abs(complex_data)
  amplitude = amplitude/max(max(amplitude))
  A = zeros((complex_data.shape[0], complex_data.shape[1], 3))
  A[:,:,0] = .5*(sin(phase)+1)*amplitude
  A[:,:,1] = .5*(sin(phase+pi/2)+1)*amplitude
  A[:,:,2] = .5*(-sin(phase)+1)*amplitude
  if(invert):
    return 1-A
  else:
    return A

import numpy as np
from matplotlib.pyplot import figure

N = 1024
x = np.linspace(-1, 1, N)
y = np.linspace(-1, 1, N)

X,Y = np.meshgrid(x,y)

R = np.sqrt(X*X + Y*Y)
PHI = np.arctan2(Y, X)

fig = figure()
ax = fig.add_subplot(212, polar=True)

ax.imshow(complex_to_rgb(R*np.exp(1j*PHI)  * (R<1), invert=True))

ax.set_xticks([-.5, 0, np.pi/2, np.pi, 3*np.pi/2])
ax.set_yticks([0, N/3, 2*N/3, N])

ax.set_xticklabels(['', '$0$', r'$\pi/2$', r'$\pi$', r'$3\pi/2$'])
ax.set_yticklabels([])

fig.show()

生成一个不错的HSV图例。现在我想删除-.5 xtick,但这似乎搞砸了所有内容。有人知道怎么修这个东西吗?我已经reported it as a bug

1 个答案:

答案 0 :(得分:0)

the bug report所述,我可以通过指定显式extentimshow将径向轴放在我想要的任何位置。此外,rgrids可用于修复刻度标签的角度。

def complex_to_rgb(complex_data, invert=False):
  from numpy import angle, max, pi, sin, zeros
  phase = angle(complex_data)
  amplitude = abs(complex_data)
  amplitude = amplitude/max(max(amplitude))
  A = zeros((complex_data.shape[0], complex_data.shape[1], 3))
  A[:,:,0] = .5*(sin(phase)+1)*amplitude
  A[:,:,1] = .5*(sin(phase+pi/2)+1)*amplitude
  A[:,:,2] = .5*(-sin(phase)+1)*amplitude
  if(invert):
    return 1-A
  else:
    return A

import numpy as np
from matplotlib.pyplot import figure

N = 1024
x = np.linspace(-1, 1, N)
y = np.linspace(-1, 1, N)

X,Y = np.meshgrid(x,y)

R = np.sqrt(X*X + Y*Y)
PHI = np.arctan2(Y, X)

fig = figure()
ax = fig.add_subplot(111, polar=True)

ax.imshow(complex_to_rgb(R*np.exp(1j*PHI)  * (R<1), invert=True), extent=[0,2*np.pi, 0,1024])

ax.set_rgrids([1,N/3,2*N/3], angle=45)
ax.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2])
ax.set_yticks([0, N/3, 2*N/3, N])

ax.set_xticklabels([r'$0$', r'$\pi/2$', r'$\pi$', r'$3\pi/2$'])
ax.set_yticklabels([r'0', r'$1/3$', r'$2/3$', '1'])

fig.show()

导致: HSV legend