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
相关产品推荐
相关产品推荐

