使用Plotly Candlestick图时仅显示X轴数据,其余数据无显示
问题:Plotly K线图仅显示X轴,无数据
尝试从Excel文件绘制K线图,无法修改原文件。通过groupby()+get_group()按年月分组,计算各月Open/High/Low/Close的均值后存入列表,程序无报错,但图表只显示X轴日期,其余数据不显示。
原代码核心问题
- 均值格式错误:原代码中
june2019.mean()会计算分组内所有列的均值,返回的是Pandas Series而非单个数值。比如mJUN19O包含了Month、Year、Open、High等所有列的均值,Plotly无法识别这种结构作为K线图的数值输入。 - 复制粘贴错误:多处出现变量赋值错误,比如
sep2019Open = aug2019['Open']、mOCT19O = sep2019.mean(),导致数据混乱。 - 代码冗余低效:重复调用
get_group()获取相同分组,既增加代码量又容易出错。
修复后的代码
import plotly.graph_objects as go import pandas as pd def main(): # 读取Excel数据 df = pd.read_excel('DatosUnited.xlsx') # 按年月分组,一次性计算目标列的均值 monthly_means = df.groupby(['Year', 'Month']).agg( Open=('Open', 'mean'), High=('High', 'mean'), Low=('Low', 'mean'), Close=('Close/Price', 'mean') ).reset_index() # 筛选2019年6-12月的数据 filtered_data = monthly_means[(monthly_means['Year'] == 2019) & (monthly_means['Month'].between(6, 12))] # 生成X轴日期标签 dates = [f"{month}-{year}" for year, month in zip(filtered_data['Year'], filtered_data['Month'])] # 绘制K线图 fig = go.Figure(data=[go.Candlestick( x=dates, open=filtered_data['Open'].tolist(), high=filtered_data['High'].tolist(), low=filtered_data['Low'].tolist(), close=filtered_data['Close'].tolist() )]) fig.update_layout(title='2019年6-12月月度均值K线图') fig.show() if __name__ == "__main__": main()
修复说明
- 批量计算均值:用
groupby().agg()直接指定需要计算均值的列,生成结构清晰的DataFrame,避免重复代码和手动分组的错误。 - 转换数值格式:通过
.tolist()将DataFrame的列转换为纯数值列表,完全符合Plotly K线图的输入要求。 - 精准筛选数据:用布尔索引快速筛选2019年6-12月的数据,无需逐个手动获取分组。
- 消除数据错误:彻底解决原代码中复制粘贴导致的变量赋值错误。
内容的提问来源于stack exchange,提问作者Adrián Desentis Flores
相关产品推荐
相关产品推荐

