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

