How to rotate a plotly fig

I have a plot that I want to rotate by 45 degree given .
How will I handle my x and y axis values

Outcome as follows . Any suggestion will work

@yogi_dhiman Over the last few years I have answered this question about three times. Please search the forum and if you donโ€™t find it or if in the meantime another plotly user doesnโ€™t answer, I will leave the solution tomorrow.

I search it before posting my question , can you please give the link directing to the relevant solution post , a better practice to make forum more helpful.

@yogi_dhiman
The previous examples have been related to heatmap and contour plot, but meanwhile the scipy function involved in rotating a figure changed its name, as well as np.float (now itโ€™s simply float). https://chart-studio.plotly.com/~empet/15760
heatmap-rot-anim

To rotate a go.Figure, fig, it is converted by the function plotly_fig2array() to a RGB-array, i.e. an array of shape (m, n, 4).
The RGB-array is passed to the scipy function, scipy.ndimage.rotate() to get the rotated figure, represented also by a RBG-array, which is displayed by px.imshow(). But by default the px.imshow() adds a hovertemplarte to this image which leads to displaying pixel position and its color in the rotated figure. However we are not interested in such information. Thatโ€™s why we create an image with hoverinfo=โ€œnoneโ€.
Unfortunately the transformed plotly figures by a scipy geometrical map (not only rotation) are no more interactive.

import plotly.graph_objects as go
import plotly.express as px
import numpy as np
import scipy.ndimage
import io 
from PIL import Image
def plotly_fig2array(fig):
    #convert a Plotly fig to  a RGB-array
    fig_bytes = fig.to_image(format="png")
    buf = io.BytesIO(fig_bytes)
    img = Image.open(buf)
    return np.asarray(img)

fig = go.Figure(go.Scatter(x=3+5* np.random.rand(20), 
                         y=3+5*np.random.rand(20),
                         mode="markers", 
                         marker=dict(color=4+2*np.random.rand(20), 
                                     showscale=True, colorbar_thickness=23,
                                     symbol="diamond", size=14),
                         hovertemplate="x: %{x}<br>y: %{y}<br>val: %{marker.color:.2f}"))
fig.update_layout(width=500, height=500)
fig.show()

farr = plotly_fig2array(fig)
rotated_farr = scipy.ndimage.rotate(farr, -45, reshape=True, cval=np.nan)
print(farr.shape, rotated_farr.shape)
fign=px.imshow(rotated_farr)  #fign has a hovertemplate and on hover are displyed image data
#fign.update_traces(hovertemplate="<extra></extra>")#has an unexpected effect

#redefine the same image with hoverinfo= none, because hovertemplate and hoverinfo are not allowed simultaneously
myfign = go.Figure(go.Image(source=fign.data[0].source, hoverinfo="none"))
myfign.update_layout(width=rotated_farr.shape[0]+2, height=rotated_farr.shape[1]+2, template="plotly_white",
                     xaxis_visible=False, yaxis_visible=False, margin=dict(t=2, r=2, b=2, l=2)
                    )

2 Likes