Plotly.js,在图表容器外显示工具提示
Plotly.js, show tooltips outside of chart container
我需要在宽度非常有限的页面上实现 plotly.js 图表。结果,工具提示被部分剪切。是否有可能导致工具提示不受 plotly.js 容器大小的限制?
我在 codepen 的代码示例:https://codepen.io/anatoly314/pen/gOavXzZ?editors=1111
//my single trace defined as following but it's better to see example at codepen
const yValue1 = [1000];
const trace1 = {
x: [1],
y: yValue1,
name: `Model 1`,
text: yValue1.map(value => Math.abs(value)),
type: 'bar',
textposition: 'outside'
};
根据设计,图表的任何部分都不可能溢出其容器。
我要说的是,按设计这是不可能的是错误的!这有点 hacky,但是当您添加以下行时,它会在 svg 之外显示标签:
svg.main-svg,svg.main-svg *
{
overflow:visible !important;
}
rokdd 给出的答案有效。但是 css 选择器应该更具体,否则很自然会引入细微的错误(特别是如果您需要滚动包含 plotly 图表的内容)。
如果我们查看由 Plotly 构建的 DOM 树,我们会发现工具提示是在 <g class="hoverlayer"></g>
元素(它是三个 <svg class="main-svg"></svg>
).因此,父项(svg.main-svg
元素)只是需要受影响的一个。
在这种情况下,理想的 css 选择器是 :has
选择器。但是它仍然不受支持(截至 2022 年):https://css-tricks.com/the-css-has-selector/
所以下一个最简单的事情就是在我们调用 Plotly.newPlot
:
之后立即使用一点 javascript
// get the correct svg element
var mainSvgEl = document.querySelector('#positive g.hoverlayer').parentElement;
mainSvgEl.style['overflow'] = 'visible';
或者以更通用的方式(适用于任何图表):
Array.from(document.querySelectorAll('g.hoverlayer')).forEach(hoverEl => {
let mainSvgEl = hoverEl.parentElement;
mainSvgEl.style['overflow'] = 'visible';
});
我需要在宽度非常有限的页面上实现 plotly.js 图表。结果,工具提示被部分剪切。是否有可能导致工具提示不受 plotly.js 容器大小的限制?
我在 codepen 的代码示例:https://codepen.io/anatoly314/pen/gOavXzZ?editors=1111
//my single trace defined as following but it's better to see example at codepen
const yValue1 = [1000];
const trace1 = {
x: [1],
y: yValue1,
name: `Model 1`,
text: yValue1.map(value => Math.abs(value)),
type: 'bar',
textposition: 'outside'
};
根据设计,图表的任何部分都不可能溢出其容器。
我要说的是,按设计这是不可能的是错误的!这有点 hacky,但是当您添加以下行时,它会在 svg 之外显示标签:
svg.main-svg,svg.main-svg *
{
overflow:visible !important;
}
rokdd 给出的答案有效。但是 css 选择器应该更具体,否则很自然会引入细微的错误(特别是如果您需要滚动包含 plotly 图表的内容)。
如果我们查看由 Plotly 构建的 DOM 树,我们会发现工具提示是在 <g class="hoverlayer"></g>
元素(它是三个 <svg class="main-svg"></svg>
).因此,父项(svg.main-svg
元素)只是需要受影响的一个。
在这种情况下,理想的 css 选择器是 :has
选择器。但是它仍然不受支持(截至 2022 年):https://css-tricks.com/the-css-has-selector/
所以下一个最简单的事情就是在我们调用 Plotly.newPlot
:
// get the correct svg element
var mainSvgEl = document.querySelector('#positive g.hoverlayer').parentElement;
mainSvgEl.style['overflow'] = 'visible';
或者以更通用的方式(适用于任何图表):
Array.from(document.querySelectorAll('g.hoverlayer')).forEach(hoverEl => {
let mainSvgEl = hoverEl.parentElement;
mainSvgEl.style['overflow'] = 'visible';
});