Python Plotly 时区在 x 轴烛台中设置不正确

标签 python datetime timezone plotly

当我将 plotly 与 datetime 一起使用时,它显示错误的时间,例如8/12/2017 10:00am,但 plotly 的 plotly 显示是 8/12/2017 2:00am。

我想绘制以日期时间为 x 轴的烛台,日期时间初始化如下:

    today = datetime.datetime.now()
    self.start_time = today.replace(second=0, microsecond=0)
    num_data_points = 90

    # define OHLC data variable for plotting candles
    self.open_data = [0] * num_data_points
    self.high_data = [0] * num_data_points
    self.low_data = [0] * num_data_points
    self.close_data = [0] * num_data_points

    self.time_interval = datetime.timedelta(minutes=time_interval)
    self.datetime_data = [self.start_time+datetime.timedelta(minutes=i) for i in range(num_data_points)]

并按如下方式使用 plotly:

    layout = go.Layout(
        plot_bgcolor = '#fafafa',
        yaxis = dict( domain = [0, 0.2], showticklabels = True ),
        yaxis2 = dict( domain = [0.25, 0.8], range=[self.y_min, self.y_max] ),
        legend = dict( orientation = 'h', y=0.9, x=0.3, yanchor='bottom' ),
        margin = dict( t=40, b=40, r=40, l=40 ),
        boxgroupgap = 0.0,
        boxgap = 0.0,
        title='Volume: {0}, Avg: {1:.2f}, Std: {2:.3f}'.format(
                self.volumn_sum,
                self.price_avg, 
                self.price_std,
            )
    )

    # print(self.datetime_data)
    # datetime_data = np.array(self.datetime_data, dtype='M8[us]')
    datetime_data = pd.Series(self.datetime_data).tz_convert('Hongkong')

    print('='*30, '\n', datetime_data)
    # ADD candlestick
    candle_trace = go.Candlestick(
        open = self.open_data,
        high = self.high_data,
        low = self.low_data,
        close = self.close_data,
        x = datetime_data,
        yaxis = 'y2',
        name = 'Candlestick',
        # increasing = dict(line=dict(color=INCREASING_COLOR)),
        # decreasing = dict(line=dict(color=DECREASING_COLOR)),
    )

    fig = go.Figure(data=data, layout=layout)
    plot(fig, 'stock plot')

我已经正确检查了日期时间的开始,例如8/12/2017 10:00am(即 datetime.datetime(2017, 12, 8, 10, 0, 0, 0),)但是 plotly 的 plotly 显示是 8/12/2017 2:00am。

Plotly Result

我尝试了以下方法,但都不适合我: 1. 添加 os.environ['TZ'] = '香港' 2. datetime_obj = datetime_obj.replace(tzinfo=pytz.timezone('香港')

感谢您的关注,感谢您的帮助和讨论。

最佳答案

当您使用日期时间时,Plotly 总是以 UTC 时间显示它。据我所知,他们从未创建一个选项供您传递以修改该行为。

但是,我发现如果您将 x 轴数据作为字符串传递,Plotly 会将其转换为日期时间并最终按照您传递的方式显示它。 x = datetime_data.astype('str') 应该可以完成这项工作。

关于Python Plotly 时区在 x 轴烛台中设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47710126/

相关文章:

mysql - 类型 "Local Datetime"的列与 MySQL 数据库中的类型 "TIMESTAMP"不匹配

python - 如何处理 "inspect.getsource"的限制 - 或者如何仅获取函数的源代码?

Python 构建系统根本不工作。问题是什么?

SQL Server : compare datetime day with GETDATE()

wpf - 需要在动态构建的 WPF DataGrid 中格式化日期

perl cookie 时间错误

ruby-on-rails - 以秒为单位获取@post.created_at 之前的剩余时间

python - Django:将 View 中的日期时间设置为 utc+1

python - numpy.concatenate 与奇怪的 (3,) 形状的数组?

python - 使用 Python 抓取加拿大环境时出现 IOError