You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Plotly图表未包含所有数据的技术求助

解决Plotly图表未显示所有数值的问题

首先看你的代码里,ambTime列表存在大量重复的时间值,Plotly默认在处理相同X轴数据时,会自动合并相同刻度的点,这就导致很多重复时间对应的Y轴数值被隐藏了。这里给你几个可行的解决办法:

方法1:给重复时间添加微小偏移

既然相同时间戳是问题根源,我们可以给每个重复的时间戳加上一点点不同的偏移,让它们在X轴上能被区分开,同时视觉上还是接近原来的时间位置。

示例代码:

import plotly.graph_objs as go
import plotly.offline as ply
from datetime import datetime, timedelta

# 原始数据
ambTime = ['10:32:42.951', '10:32:42.951', '10:32:42.951', '10:32:42.951', 
           '10:32:42.951', '10:32:42.951', '10:32:42.951', '10:32:42.951', 
           '10:32:42.951', '10:32:42.951', '10:32:42.951', '10:32:42.951', 
           '10:32:42.951', '10:32:42.951', '10:32:53.117']
domv1R1Temps = [25.1, 25.2, 25.3, 25.4, 25.5, 25.6, 25.7, 25.8, 25.9, 26.0, 
                26.1, 26.2, 26.3, 26.4, 26.5] # 假设的Y轴数据

# 处理时间戳,添加微小偏移
processed_times = []
time_format = "%H:%M:%S.%f"
for idx, time_str in enumerate(ambTime):
    dt = datetime.strptime(time_str, time_format)
    # 给每个重复时间添加微秒级偏移,避免重叠
    dt += timedelta(microseconds=idx*10)
    processed_times.append(dt.strftime(time_format))

# 绘制图表
trace = go.Scatter(
    x=processed_times,
    y=domv1R1Temps,
    mode='markers+lines', # 同时显示标记和连线,确保每个点都可见
    name='Temperature'
)

layout = go.Layout(
    xaxis=dict(
        title='Time',
        tickangle=45, # 旋转X轴标签,避免重叠
        tickmode='array',
        tickvals=processed_times, # 强制显示所有时间刻度
        ticktext=[t.split('.')[0] + '.' + t.split('.')[1][:3] for t in processed_times] # 保持原时间格式显示
    ),
    yaxis=dict(title='Temperature')
)

fig = go.Figure(data=[trace], layout=layout)
ply.plot(fig, filename='temperature_plot.html')

方法2:使用索引作为X轴,时间作为悬停文本

如果不需要在X轴显示精确的重复时间,也可以用数据的索引作为X轴,把时间放到悬停提示里,这样所有Y轴数值都会显示:

import plotly.graph_objs as go
import plotly.offline as ply

ambTime = ['10:32:42.951', '10:32:42.951', ...] # 你的原始时间列表
domv1R1Temps = [...] # 对应的温度数据

trace = go.Scatter(
    x=list(range(len(domv1R1Temps))),
    y=domv1R1Temps,
    mode='markers+lines',
    name='Temperature',
    text=ambTime, # 悬停时显示对应的时间
    hoverinfo='text+y' # 悬停提示显示时间和温度
)

layout = go.Layout(
    xaxis=dict(title='Data Index'),
    yaxis=dict(title='Temperature')
)

fig = go.Figure(data=[trace], layout=layout)
ply.plot(fig, filename='temperature_plot.html')

方法3:设置Plotly的X轴不合并重复值

还有一种方式是直接告诉Plotly不要合并相同的X轴刻度,通过调整xaxis的categoryorder和categoryarray参数:

import plotly.graph_objs as go
import plotly.offline as ply

ambTime = ['10:32:42.951', '10:32:42.951', ...]
domv1R1Temps = [...]

trace = go.Scatter(
    x=ambTime,
    y=domv1R1Temps,
    mode='markers+lines',
    name='Temperature'
)

layout = go.Layout(
    xaxis=dict(
        title='Time',
        tickangle=45,
        categoryorder='array', # 按照原始数组顺序显示
        categoryarray=ambTime, # 使用原始时间数组作为刻度顺序
        tickmode='array',
        tickvals=ambTime,
        ticktext=ambTime
    ),
    yaxis=dict(title='Temperature')
)

fig = go.Figure(data=[trace], layout=layout)
ply.plot(fig, filename='temperature_plot.html')

你可以根据自己的需求选择合适的方法,一般第一种方法既能保留时间的视觉一致性,又能显示所有数据点,是比较常用的解决方案。

内容的提问来源于stack exchange,提问作者seyet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:17