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

在Databricks中使用plotnine绘图重复显示及修改不生效问题求助

解决Databricks中plotnine图表重复显示及修改不生效问题

一、图表重复显示的处理方案

在Databricks环境中,直接在单元格末尾输出ggplot对象(即写my_plot)会触发Notebook的自动输出机制,加上变量持久化特性,导致后续运行任意单元格时旧图表重复渲染。可通过以下方式解决:

  • 显式控制绘图与画布清理
    借助matplotlib的方法显式输出图表,并在绘图后关闭画布,避免缓存旧内容:

    import matplotlib.pyplot as plt
    
    # 重新定义绘图对象
    my_plot = (ggplot(df, aes(x='x', y='y')) + 
      geom_col(show_legend=True) +
      scale_x_discrete(name='Familia') +
      scale_y_continuous(name='Número de prendas', 
                         breaks=range(0, 8000+1, 2000)) +
      ggtitle('Número de prendas por familia') +
      theme(figure_size=(8,6), 
            panel_grid_major_y=element_line(color='000', size=0.3, linetype='solid'),
            panel_grid_minor_y=element_line(color='000', size=0.2, linetype='dashed'))
    )
    
    # 绘制、显示并清理画布
    my_plot.draw()
    plt.show()
    plt.close()
    

    plt.close()会彻底关闭当前matplotlib画布,杜绝后续重复渲染旧图表的可能。

  • 直接链式调用绘图(不存储变量)
    跳过变量赋值,直接在单元格内链式执行绘图代码,避免持久化的绘图对象被重复触发:

    %matplotlib inline
    
    (ggplot(df, aes(x='x', y='y')) + 
      geom_col(show_legend=True) +
      scale_x_discrete(name='Familia') +
      scale_y_continuous(name='Número de prendas', 
                         breaks=range(0, 8000+1, 2000)) +
      ggtitle('Número de prendas por familia') +
      theme(figure_size=(8,6), 
            panel_grid_major_y=element_line(color='000', size=0.3, linetype='solid'),
            panel_grid_minor_y=element_line(color='000', size=0.2, linetype='dashed'))
    ).draw()
    

二、修改图表后不生效的解决方法

使用my_plot.draw()后修改代码不生效,核心原因是旧的绘图对象仍被缓存,需遵循以下操作流程:

  1. 修改my_plot的定义代码后,必须重新运行定义my_plot的单元格,确保变量指向新的绘图配置。
  2. 运行包含my_plot.draw() + plt.show() + plt.close()的单元格,通过plt.close()清理旧画布,加载新的绘图内容。

也可以直接采用「链式调用绘图」的方式,每次修改后直接运行完整代码,彻底规避旧对象缓存问题。


内容的提问来源于stack exchange,提问作者Nacho Arévalo Evans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:57:41