Skip to content

polar rgb imshow xticks issue #2827

@rubenvb

Description

@rubenvb

I'm currently trying to plot an HSV legend, i.e. a circle of color that becomes white as the radius goes to 0. I also posted this question on stackoverflow in the hope of getting a clever workaround.

Code:

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))

ax.set_xticks([-.5, 0, np.pi/2, np.pi, 3*np.pi/2])#-.5)
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()

Problem is, if I change the -.5 xtick (e.g. to +.5), the plot gets messed up and I get division by zero warnings:

....\lib\site-packages\matplotlib\image.py:161: RuntimeWarning: divide by zero encountered in double_scalars
  sy = dyintv/viewlim.height
....\lib\site-packages\matplotlib\image.py:190: RuntimeWarning: divide by zero encountered in double_scalars
  sy = dyintv/viewlim.height

I don't want the -.5 arbitrary tick mark. Why does a tick mark influence the drawing of an image?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions