我为显示加载时间表的仪表板编写了一个脚本.成功的任务为绿色,错误的任务为红色.还有一张CPU和内存负载的图表.我试着显示两个图表,一个在另一个下面.但是,由于第一个图表的图例显示为文本并占用一些空间,因此第二个图表在X轴上并不完全重合.然后我试着把这两张图合并为一张.但随后,第一张图表中的红色条目就会丢失.起初,我认为这是因为时间戳不同(有不同的表,微秒有不同的格式).但后来我使用数组常量编写了一个测试脚本,问题仍然存在.这是一个BUG还是PLOTLY库的一个功能?我可以以某种方式显示不同的流程图,以便可以组合这些图形吗?我想使用情节来可能与图表互动.我试着使用Spotter作为加载时间表--但我并不是特别喜欢它的样子.目前还不清楚这一过程需要多长时间.

以下是我的代码和图表示例.

import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# creating data for df_1
np.random.seed(42)
n_rows = 50
start_time = datetime(2023, 9, 21, 0, 0, 0)
end_time = start_time + timedelta(days=1)
chain_ids = np.random.choice(['Chain_01', 'Chain_02', 'Chain_03'], n_rows)
colors = np.random.choice(['green', 'red'], n_rows)
timestamps_start = pd.date_range(start=start_time, end=end_time, periods=n_rows)
timestamps_end = timestamps_start + pd.to_timedelta(np.random.randint(10, 1600, n_rows), unit='s')

df_1 = pd.DataFrame({
    'CHAIN_ID': chain_ids,
    'Color': colors,
    'TSTMP_START': timestamps_start,
    'TSTMP_END': timestamps_end
})

# creating data for df_2
n_rows_p = 150
timestamps_p = pd.date_range(start=start_time, end=end_time, periods=n_rows_p)
peak_used_gb = np.random.uniform(500, 1200, n_rows_p)
used_physical_gb = np.random.uniform(1200, 1800, n_rows_p)

df_2 = pd.DataFrame({
    'SERVER_TIMESTAMP': timestamps_p,
    'Peak_Used_GB': peak_used_gb,
    'Used_physical_GB': used_physical_gb
})

color_map = {'green': 'green', 'red': 'red', 'yellow': 'yellow'}

fig1 = px.timeline(df_1,
                   x_start='TSTMP_START',
                   x_end='TSTMP_END',
                   y='CHAIN_ID',
                   color='Color',
                   color_discrete_map=color_map)

fig2 = go.Figure()
fig2.add_trace(go.Scatter(x=df_2['SERVER_TIMESTAMP'], y=df_2['Peak_Used_GB'], mode='lines', name='Peak_Used_GB', line=dict(color='blue')))
fig2.add_trace(go.Scatter(x=df_2['SERVER_TIMESTAMP'], y=df_2['Used_physical_GB'], mode='lines', name='Used_physical_GB', line=dict(color='orange')))

fig_c = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.06, row_width=[0.1, 0.4])
fig_c.add_trace(fig1.data[0], row=1, col=1)
fig_c.add_trace(fig2.data[0], row=2, col=1)
fig_c.add_trace(fig2.data[1], row=2, col=1)

fig_c.update_layout(height=600)
fig_c.update_xaxes(type='date')

fig1.show()
fig_c.show()

fig1 and fig2 chart: fig1 chart

Combined chart: combined chart

I expect chart like this: Target chart design

推荐答案

你需要把fig1.data中的第二个Bar加为secondary

fig_c = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.06, row_width=[0.1, 0.4], specs=[[{"secondary_y": True}]] * len(fig1.data))
fig_c.add_trace(fig1.data[0], row=1, col=1)
fig_c.add_trace(fig1.data[1], row=1, col=1, secondary_y=True)
fig_c.add_trace(fig2.data[0], row=2, col=1)
fig_c.add_trace(fig2.data[1], row=2, col=1)

enter image description here

Python相关问答推荐

根据在同一数据框中的查找向数据框添加值

基于字符串匹配条件合并两个帧

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

使用NeuralProphet绘制置信区间时出错

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

使用特定值作为引用替换数据框行上的值

如何在Pyplot表中舍入值

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

Discord.py -

比Pandas 更好的 Select

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

如何在一组行中找到循环?

多个矩阵的张量积

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

将标签与山脊线图对齐

关于数字S种子序列内部工作原理的困惑

如何在Python中画一个只能在对角线内裁剪的圆?

正则表达式反向查找

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?