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

使用for循环创建hvplot图表无法显示的问题求助

解决hvplot循环绘图不显示的问题

嘿,我之前也碰到过一模一样的问题!和matplotlib需要plt.show()触发显示不同,hvplot基于Holoviews,是声明式绘图库——你创建的每个图表都是一个独立对象,光在循环里生成它不会自动渲染,得明确告诉Jupyter要把这些对象输出出来才行。

下面给你两种最常用的解决办法:

方法1:收集所有图表,最后组合显示

这种方式适合把所有年份的图表整齐排列在一起,可读性更强:

import holoviews as hv
import hvplot.pandas

# 先创建空列表存储所有图表对象
year_plots = []

for i in [2019,2020,2021]:
    CompanyYear = Company[Company['Year'] == i]
    # 注意:你原代码里的`filtered`应该是笔误,改成定义好的CompanyYear就行
    yearly_plot = CompanyYear.hvplot.bar(
        x='CompanyID', 
        y='Sales', 
        rot=90,
        title=f'公司销售额 - {i}年'  # 加标题区分不同年份的图表
    )
    year_plots.append(yearly_plot)

# 组合所有图表为布局,cols(1)是纵向排列,改成cols(3)可实现横向并排
hv.Layout(year_plots).cols(1)

运行这段代码后,Jupyter会自动渲染整个布局,所有年份的图表就会一起显示出来。

方法2:循环中用display()逐个显示

如果你希望每个年份的图表单独依次展示,可以用IPython的display()函数,每次循环主动输出当前图表对象:

from IPython.display import display
import hvplot.pandas

for i in [2019,2020,2021]:
    CompanyYear = Company[Company['Year'] == i]
    yearly_plot = CompanyYear.hvplot.bar(
        x='CompanyID', 
        y='Sales', 
        rot=90,
        title=f'公司销售额 - {i}年'
    )
    # 主动触发当前图表的显示
    display(yearly_plot)

这样每完成一次循环,就会立刻在Jupyter里显示对应年份的柱状图。

另外提个小细节:你原代码里的filtered和前面定义的CompanyYear变量名不一致,记得修正成统一的变量名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:57:47