Django 3.1应用程序中垂直堆叠Plotly子图中第二个图中的数据未正确显示



我正在运行一个Django 3.1应用程序,使用plotly在.html模板文件中显示交互式图表。

我正在尝试使用子情节功能创建一个情节。

该图有2行1列。第一行正确显示了第一个图表,它是每日股票价格的蜡烛图。图表的第二行是股票价格每一天的成交量条形图。

当我运行该应用程序时,我没有收到服务器错误,.html页面也按预期加载。

然而,第二张图应该是体积的条形图,但该图是空白的。绘图将正确显示刻度的Y轴和X轴标题以及体积数据所需的值。

如果我将axis_rangeslider_visible设置为True,则图表会在第二个图表中显示体积数据所在的范围选择器。轴标签仍然显示预期值和标签,就像绘制体积数据一样。

以下代码来自Django应用程序中的views.py文件。

from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from users.models import CustomUser
from .models import Chart
import pandas as pd
from datetime import datetime
from smart_open import smart_open
from django.conf import settings
import plotly.express as px
import plotly.graph_objs as go
from plotly.subplots import make_subplots

class ChartDetailView(LoginRequiredMixin, DetailView):
model = Chart

def get_queryset(self):
return Chart.objects.filter(user=self.request.user)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)

path = 's3://{}:{}@{}/{}'.format(settings.AWS_ACCESS_KEY_ID,
settings.AWS_SECRET_ACCESS_KEY,
settings.AWS_STORAGE_BUCKET_NAME,
self.object.data_file.name)
df_daily = pd.read_csv(smart_open(path), parse_dates=True)
df_daily['Date'] = pd.to_datetime(df_daily['Date'])
df_daily = df_daily.set_index('Date')
fig_daily = make_subplots(rows=2, cols=1,
row_heights=[0.8, 0.2],
specs=[[{"type": "candlestick"}],
[{"type": "bar"}]],
shared_xaxes=True,
vertical_spacing=0.02)
fig_daily.add_trace(go.Candlestick(x=df_daily.index,
open=df_daily['Open'],
high=df_daily['High'],
low=df_daily['Low'],
close=df_daily['Close'],
showlegend=False,
),
row=1, col=1)
fig_daily.add_trace(go.Bar(x=df_daily.index,
y=df_daily['Volume'],
marker=dict(color="crimson"),
showlegend=False),
row=2, col=1)
# Update xaxis properties
fig_daily.update_xaxes(title=None,row=1, col=1)
fig_daily.update_xaxes(title="Date", row=2, col=1)
# Update yaxis properties
fig_daily.update_yaxes(title="$/share", row=1, col=1)
fig_daily.update_yaxes(title="Volume", range=[0, df_daily['Volume'].max()], row=2, col=1)
fig_daily.update_layout(title='Daily Stock Price and Volume',
xaxis_rangeslider_visible=False,
margin=dict(r=5, t=30, b=5, l=5),
height=650,
width=700)
graph_daily = fig_daily.to_html()
df_daily = df_daily[['Open', 'High', 'Low', 'Close', 'Volume']].to_html(classes='mystyle')
context['df_daily'] = df_daily
context['graph_daily'] = graph_daily
return context

我仍然不明白潜在的问题是什么。然而,我已经通过绘制较小的样本量解决了我的迫切需要。原始图有大约5500个数据点。当我将大小限制在500以下时,第二个子图形显示正确。

绘图子图中可以使用的数据点数量也有上限吗。只有在第二个情节中。令人困惑。

相关内容

最新更新