I want to make a heatmap graph in polar coordinate. There is many examples with scaterplotpolar, but nothing to make polar graph with other graphs types.
Is this supported ?
@ghislainp Polar heatmap is not supported at the moment. It makes sense to plot such a heatmap when you intend to map your data to a cyclical colorscale, according to their polar angle. In this case you should use a circular colorscale such as hsv
or phase
(from matplotlib cmocean). See the attached images.
Here is an example of polar heatmap:
https://plot.ly/~empet/13959. If you are interested in this type of heatmap, and your data is in cartesian coordinates, drop here a message and I’ll post a jupyter notebook illustrating how to define it.
HSV colorscale:
phase colorscale:
@empet Hi empet, I’m new to Plotly and I need to draw this type of Polar heatmap in my work. I searched around but I didn’t find how to do it in Plotly. It would be very appreciated if you could show how to do it.
Here is my data:
x_cord = [0, -0.0, -34.6, -49, -34.6, 0.0, 34.6, 49, 34.6, -0.0, -37.5, -69.3, -90.5, -98, -90.5, -69.3, -37.5, 0.0, 37.5, 69.3, 90.5, 98, 90.5, 69.3, 37.5, -0.0, -38.0, -73.5, -103.9, -127.3, -142.0, -147, -142.0, -127.3, -103.9, -73.5, -38.0, 0.0, 38.0, 73.5, 103.9, 127.3, 142.0, 147, 142.0, 127.3, 103.9, 73.5, 38.0]
y_cord = [0, 49, 34.6, -0.0, -34.6, -49, -34.6, 0.0, 34.6, 98, 90.5, 69.3, 37.5, -0.0, -37.5, -69.3, -90.5, -98, -90.5, -69.3, -37.5, 0.0, 37.5, 69.3, 90.5, 147, 142.0, 127.3, 103.9, 73.5, 38.0, -0.0, -38.0, -73.5, -103.9, -127.3, -142.0, -147, -142.0, -127.3, -103.9, -73.5, -38.0, 0.0, 38.0, 73.5, 103.9, 127.3, 142.0]
The x_cord and y_cord are fixed all the time and we want to draw the Polar heapmap for this circle shape wafer.
The z values are calculated from other code and an example is as follow:
z_value = [0.932, 0.93, 0.93, 0.932, 0.933, 0.933, 0.932, 0.931, 0.93, 0.924, 0.925, 0.926, 0.927, 0.928, 0.929, 0.929, 0.929, 0.93, 0.929, 0.928, 0.927, 0.926, 0.925, 0.924, 0.924, 0.92, 0.92, 0.921, 0.922, 0.923, 0.923, 0.924, 0.925, 0.924, 0.924, 0.925, 0.925, 0.924, 0.923, 0.921, 0.92, 0.921, 0.92, 0.919, 0.919, 0.917, 0.917, 0.918, 0.919]
Thanks!
Hi @fengjie08,
Welcome to Plotly!
To be able to plot a heatmap within a disk of radius R, first you should define a grid on the rectangle
[-R, R] x[R, R], and mask the outside of the disk:
N = 300
R=1
x = np.linspace(-R,R, N)
y = np.linspace(-R,R, N)
X,Y = np.meshgrid(x,y)
disk = X**2+Y**2
I, J = np.where(disk>R)
z = X*Y**2-X**3*np.sin(X-Y)
z[I, J] = None # mask the outside of the disk of center (0,0) and radius R
trace = dict(type='heatmap',
x=x,
y=y,
z=z, #note that z has the shape of X,Y, not x, y as in your example!!!!!!!!!!
colorscale='YlGnBu',
showscale=True,
colorbar=dict(thickness=20,
ticklen=4,
tickfont=dict(size=10)))
layout = dict(title='Polar heatmap',
width=450,
height=450,
showlegend=False,
xaxis=dict(visible=False),
yaxis=dict(visible=False)
)
Here is the corresponding Figure:
Your posted data don’t meet this requirement. I plotted your points (x,y) as a scatter plot and noticed that they lie on a few concentric circles.
In the above example my z-values aren’t periodic in the polar angle. If your data are periodic then you should use a cyclic colorscale like hsv, or the new twilight colorscale:
pl_hsv = [[0.0, 'rgb(0, 242, 242)'],#S=1, V=0.95,
[0.083, 'rgb(0, 121, 242)'],
[0.166, 'rgb(0, 0, 242)'],
[0.25, 'rgb(121, 0, 242)'],
[0.333, 'rgb(242, 0, 242)'],
[0.416, 'rgb(242, 0, 121)'],
[0.5, 'rgb(242, 0, 0)'],
[0.583, 'rgb(242, 121, 0)'],
[0.666, 'rgb(242, 242, 0)'],
[0.75, 'rgb(121, 242, 0)'],
[0.833, 'rgb(0, 242, 0)'],
[0.916, 'rgb(0, 242, 121)'],
[1.0, 'rgb(0, 242, 242)']]
pl_twilight = [[0.0, 'rgb(225, 216, 225)'],
[0.053, 'rgb(202, 209, 215)'],
[0.105, 'rgb(164, 190, 202)'],
[0.158, 'rgb(128, 165, 195)'],
[0.211, 'rgb(106, 140, 190)'],
[0.263, 'rgb(96, 110, 184)'],
[0.316, 'rgb(94, 79, 172)'],
[0.368, 'rgb(90, 46, 147)'],
[0.421, 'rgb(76, 23, 107)'],
[0.474, 'rgb(54, 16, 66)'],
[0.526, 'rgb(55, 17, 57)'],
[0.579, 'rgb(86, 21, 70)'],
[0.632, 'rgb(120, 31, 79)'],
[0.684, 'rgb(151, 52, 79)'],
[0.737, 'rgb(173, 78, 80)'],
[0.789, 'rgb(189, 111, 90)'],
[0.842, 'rgb(199, 142, 113)'],
[0.895, 'rgb(207, 176, 154)'],
[0.947, 'rgb(218, 203, 198)'],
[1.0, 'rgb(225, 216, 225)']]
This is an example of polar heatmap with z values periodic in the polar angle:
Hi @empot, thank you very much for the help! I think I can interpolate z_value matrix into a X, Y meshgrid, and then follow your code to generate the heatmap I need. I am trying to implement this idea, but I have a quick question:
What is the code to generate the first polar heatmap in your previous respond? In detail: you defined trace and layout as following:
trace = dict(type = ‘heatmap’, x=x, …)
layout = dict(title = ‘Polar heatmap’, …)
What is the code following this to generate the heatmap?
Thank you very much!
@fengjie08, There is no code affter the trace and layout definition. The two lists, pl_hsv
and pl_twilight
are cyclic colorscale. pl_hsv
is illustrated in my answer to the question posted by gislainp, above.
Hi @empet, could you post a code pen or similar for how you produced these? Preferably in JS. I would be greatly appreciative.