plotly.py icon indicating copy to clipboard operation
plotly.py copied to clipboard

Problem with radialaxis ticks in polar plot when using date values

Open marceloandrioni opened this issue 4 years ago • 0 comments

Hello, I managed to create a polar heatmap plot following the examples given in #2024, but when trying to use time as the radial dimension I found some problems with the ticks. I tried with tickmodes auto, linear and array but got wrong ticks with all of them. The time values shown in the hover are correct, only the ticks appear to be wrong. Does anyone have a suggestion on what may be the problem? Thank you.

import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.offline import plot

from datetime import datetime, timedelta

# dt_start, dt_end, dt_step ='2000-01-01', '2001-01-01', '1MS'
dt_start, dt_end, dt_step ='2000-01-01', '2000-01-10', '1D'

times = pd.date_range(dt_start, dt_end, freq=dt_step).values

dirs = np.arange(180, 271, 10)

r, theta = np.meshgrid(times, dirs)

z = np.random.random(r.shape)

hovertemplate = (f'date: %{{r|%Y-%m-%d %H:%M:%SZ}}<br>'
                 f'direction: %{{theta}}<br>'
                 f'value: %{{customdata[0]:.2f}}'
                 '<extra></extra>')

fig = go.Figure(go.Barpolar(r=r.ravel(),
                            theta=theta.ravel(),
                            marker_color=z.ravel(),
                            customdata=np.expand_dims(z.ravel(), 0).T,
                            hovertemplate=hovertemplate))

fig.update_layout(polar=dict(
    angularaxis=dict(tickvals=np.arange(0, 360, 45),
                     direction='clockwise'),
    radialaxis=dict(angle=45,
                    tickangle=45,
                    tickfont={'size': 14},
                    tickformat='%Y-%m-%d %H:%M:%S',

                    # tickmode='auto',
                    # nticks=5,

                    # tickmode='linear',
                    # tick0=times[0],
                    # dtick='1D',

                    tickmode='array',
                    tickvals=times,

                    )))

fig.show()

With tickmode='auto':

tickmode_auto

With tickmode='linear':

tickmode_linear

With tickmode='array':

tickmode_array

Using plotly.version = '5.4.0'

marceloandrioni avatar Nov 21 '21 14:11 marceloandrioni