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

Plotly JavaScript版如何自定义toImage按钮下载的PNG文件名?

Customizing the Download Filename for Plotly.js's toImage Button

Great question! I’ve faced this exact frustration before—those default newplot.png filenames can get pretty annoying when you’re generating multiple plots. Let’s break down what’s going on and how to fix it:

The Short Answer

Plotly.js doesn’t include a built-in configuration option to set the default filename for the native "Download plot as a png" button. The config docs you checked are correct—there’s no parameter in the config object that controls this directly.

Two Workarounds to Get Custom Filenames

The cleanest approach is to bypass the default modebar button entirely and build your own. Plotly provides the Plotly.downloadImage() method, which lets you specify a custom filename directly.

Here’s a quick example:

<!-- Your plot container -->
<div id="myPlot"></div>

<!-- Custom download button -->
<button id="customDownloadBtn">Download My Plot as PNG</button>

<script>
// First, create your plot as usual
const graphDiv = document.getElementById('myPlot');
Plotly.newPlot(graphDiv, data, layout);

// Add click handler to your custom button
document.getElementById('customDownloadBtn').addEventListener('click', () => {
  Plotly.downloadImage(graphDiv, {
    format: 'png',
    filename: 'sales-report-q3-2024', // Your custom filename here
    width: graphDiv.offsetWidth,
    height: graphDiv.offsetHeight
  });
});
</script>

This gives you full control over the filename, and you can style the button to match your app’s design too.

2. Override the Default Modebar Button’s Behavior

If you want to keep using the default modebar button but change its filename behavior, you can intercept its click event and replace the default action with your own downloadImage call.

Here’s how to do it:

const graphDiv = document.getElementById('myPlot');
Plotly.newPlot(graphDiv, data, layout);

// Wait for the modebar to render, then find the download button
graphDiv.on('plotly_afterplot', () => {
  const downloadBtn = graphDiv.querySelector('.modebar-btn.download');
  if (downloadBtn) {
    downloadBtn.addEventListener('click', (e) => {
      // Prevent the default download action
      e.preventDefault();
      e.stopPropagation();
      
      // Trigger custom download with your filename
      Plotly.downloadImage(graphDiv, {
        format: 'png',
        filename: 'my-custom-plot-name',
        width: graphDiv.offsetWidth,
        height: graphDiv.offsetHeight
      });
    });
  }
});

Using the plotly_afterplot event is more reliable than a timeout, as it fires right after the plot (and its modebar) finishes rendering.

Final Notes

Both methods work across all modern browsers, and they’re compatible with recent versions of Plotly.js. If you’re using a framework like React or Vue, the core logic stays the same—you’ll just need to adjust how you reference the plot container element.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:20:51