Chart.js是一个JavaScript库,用于创建包含在网页上的动画交互式图形
我的chart.js代码中有一个问题,我想从图表中删除两条轴线,我希望显示网格(注意) ` const MAINCHARTCANVAS = document.querySelector(".main-...
如何在chart.js中使用type: 'time'作为折线图?
数据中只有一项,y 轴显示正确的数字。 图表中没有显示任何内容。它仅显示 x 和 y 轴,但图表内不显示任何内容。需要做什么才能在图表中显示数据? W...
我使用chart.js中的条形图,如下所示 条形图 现在我想显示 4 位小数而不是 3 位小数,但我只能找到如何对折线图执行此操作。 有人可以帮我吗?
当数据从图表中隐藏时,如何隐藏/删除chartjs上的y轴? 如果用户通过单击图例隐藏所有数据集,y 轴仍然存在,我想知道如何完全...
Chart.js 在同一组件中以 Angular 创建多个图表
我有一个带有组件的 Angular 6 项目,该组件获取由其父对象传递的图块对象。对于每个tile passend,我想用chart.js 生成相同的图表。我第一个角色工作得很好...
我正在尝试使用 Chart.js 获取图像中的图表。但我找不到如何使线条渐变。我想做的是当线条向上时颜色为 rgba(249, 65, 68, 1) 和 rgba(...
我想使用chart.js 绘制一条向后弯曲的线。 例如:方程 x=-(y-1)**2+1 应创建此图: 我的网页使用 python 和flask。生成 g 的代码...
我在chart.js中创建了一个饼图,但不知道如何更改每个饼片内计数的字体颜色。这是我的代码 常量选项 = { 插件:{ 传奇: { ...
我在我的项目中使用条形图。 有一项任务是滚动条形图,以便用户可以看到前几个月和余额金额。为此,我使用 Chartjs 缩放插件。 然而
目前我正在开发一个网站,我必须在标签和工具提示上对齐文本 RTL,因为它是阿拉伯语。 我已阅读文档并进行了大量搜索,但无法理解为什么 RTL 不起作用
我正在尝试创建一个加密主页来跟踪和管理与比特币相关的数据。 目前,我正在使用 Blockchain.com AP 渲染一个图表,显示矿池中矿工的数量...
当鼠标光标悬停在特定数据点上时显示此工具提示 这是小部件 property_type_id = fields.Many2one("estate.property.type", string="属性 ...
我正在使用 render() 使用 lit-html 创建和渲染 从 'lit-html' 导入 { html, render }; 常量模板项 = []; const getChartInfo = (locationToRender) => { templateItems.push(html...
Chart.js 如何在 x AXIS 上预定义 24 H 时间标签
我想在 x 轴上显示 00:00、06:00、12:00、18:00、23:59,并在时间之间显示数据。 我正在处理这个: 我想这样做: var ctx = document.getElementById("...
我想创建一个条形图,其中一个条形图中包含图像,并且看起来图像随着条形动画进入视图而显示。 我尝试创建一个保存图像的变量,然后...
我使用chart.js制作了两个饼图。两张图都有两个数据。我在增加或减少饼图数据之一的宽度时遇到问题。我还想改变那个3的角度...
如果关联的数据大于0,我想将x轴标签加粗。看起来很简单,但做不到......这是我的代码: 选项: { 动画:假, 尺度:{ X: { 格...
d3.js 和 Chart.js 之间的比较(仅适用于图表)[已关闭]
我在项目中多次使用过chart.js,但从未使用过d3.js。很多人说 d3.js 是最好的图表 javascript 框架,但没有人能够解释为什么,
如果鼠标移动太快,Chart.js `mousemove` 事件无法正确注册
我正在使用 Chart.js 4.4.0 创建一个具有类似于 Flot.js 十字线插件的十字线效果的图表。按照此 YouTube 指南,我生成了以下示例代码: 我正在使用 Chart.js 4.4.0 创建一个带有十字准线效果的图表,类似于 Flot.js crosshair 插件。按照此 YouTube 指南,我生成了以下示例代码: <html> <head> <script type="text/javascript" src="../include/chart-4.4.0.umd.js"></script> </head> <body> <div id="chart_container" class="plot" style="width:50%;"> <div> <canvas id="myChart"></canvas> </div> </div> <script> /* The Chart.js context */ const ctx = document.getElementById('myChart'); /* The Chart container node, used for crosshair */ let container = document.getElementById('chart_container'); let chart_data = { datasets: [{ data: [{x:0, y:1}, {x:1, y:1}, {x:1, y:2}, {x:2, y:2}, {x:2, y:3}, {x:3, y:3}, {x:3, y:1}, {x:4, y:1}], borderWidth: 3, /* For the crosshair to work, we must disable other * tooltip hover effects: */ pointHoverRadius: 0, pointHitRadius: 0, pointRadius: 0 }] }; /* Chart.js chart options object for the Chart.js * constructor, defined below. */ let chart_options = { showLine: true, pointStyle: false, borderColor: 'rgba(255,204,0,1)', borderWidth: 1, fill: '+1', scales: { y: {beginAtZero: true} }, }; /* Create the Chart.js chart */ let cjs_plot = new Chart(ctx, { type: 'scatter', data: chart_data, options: chart_options, }); /* Implementing the crosshair effect previously done * using the Flot.js 'crosshair' plugin. */ /* https://www.youtube.com/watch?v=za2cQFObvWQ */ container.addEventListener('mousemove', (e) => { crosshair(cjs_plot, e); }) function crosshair(chart, mousemove) { /* Setting `update` to 'none' means the refresh is * invisible so that we don't see previous crosshair * lines as the mousemoves. */ chart.update('none'); //console.log(mousemove); const x = mousemove.offsetX; const y = mousemove.offsetY; const { ctx, chartArea: {top, bottom, left, right, width, height} } = chart; ctx.save(); /* Draw items */ /* rgba(255,0,0,1) is solid red */ ctx.strokeStyle = 'rgba(255,0,0,1)'; ctx.lineWidth = 1; /* Only draw crosshairs if mouse is inside the chart area. * Remember 'y' is measured top-down. */ if(x >= left && x <= right && y >= top && y <= bottom) { /* Draw horizontal line */ ctx.beginPath(); ctx.moveTo(left, y); ctx.lineTo(right, y); ctx.stroke(); ctx.closePath(); /* Draw vertical line */ ctx.beginPath(); ctx.moveTo(x, top); ctx.lineTo(x, bottom); ctx.stroke(); ctx.closePath(); } ctx.restore(); } // End of crosshair() function </script> </body> </html> 当用户将鼠标悬停在图表上时,这会成功创建十字准线。 问题是,如果我将鼠标指针快速移出图表,线条并不总是按应有的方式消失。它们只是卡在我将鼠标移出的边缘附近。这种情况并不总是发生,当我慢慢越过边缘时,它几乎不会发生。如果光标移动得太快,代码几乎无法“注册”光标已超出其边界。 这个问题描述了类似的问题,但提供的唯一解决方案是将侦听器附加到图表的包含节点,而不是图表本身或 HTML <body>。我已经在这么做了。 这个答案也解决了问题,但仅提供了如何解决问题的一般描述。我将开始尝试这个建议,但我预计这需要一两周的努力,所以我在这里发帖,希望有人能同时发布更好的解决方案或工作代码。 (这个答案已经超过 13 年了,所以现在有理由希望有更好的解决方案)。 如何调整上述代码以保证只要指针位于图表区域之外,无论指针移动的速度如何,十字准线都会消失? 要删除十字线,您的方法依赖于在图表容器内部但在 mousemove 外部注册 chartArea 事件,因此 if 条件 (x >= left && x <= right && y >= top && y <= bottom) 变为 false。这是一个非常小的边界,可能会发生这种情况,这就是为什么很容易被(不是非常)快速的鼠标移动跳过。 删除十字线的正确方法是同时为 mouseleave 注册一个处理程序: container.addEventListener('mouseout', (e) => { cjs_plot.update('none') }); 这是添加了该内容的代码片段 /* The Chart.js context */ const ctx = document.getElementById('myChart'); /* The Chart container node, used for crosshair */ let container = document.getElementById('chart_container'); let chart_data = { datasets: [{ data: [{x:0, y:1}, {x:1, y:1}, {x:1, y:2}, {x:2, y:2}, {x:2, y:3}, {x:3, y:3}, {x:3, y:1}, {x:4, y:1}], borderWidth: 3, /* For the crosshair to work, we must disable other * tooltip hover effects: */ pointHoverRadius: 0, pointHitRadius: 0, pointRadius: 0 }] }; /* Chart.js chart options object for the Chart.js * constructor, defined below. */ let chart_options = { showLine: true, pointStyle: false, borderColor: 'rgba(255,204,0,1)', borderWidth: 1, fill: '+1', scales: { y: {beginAtZero: true} }, }; /* Create the Chart.js chart */ let cjs_plot = new Chart(ctx, { type: 'scatter', data: chart_data, options: chart_options, }); /* Implementing the crosshair effect previously done * using the Flot.js 'crosshair' plugin. */ /* https://www.youtube.com/watch?v=za2cQFObvWQ */ container.addEventListener('mousemove', (e) => { crosshair(cjs_plot, e); }) container.addEventListener('mouseout', (e) => { cjs_plot.update('none') }) function crosshair(chart, mousemove) { /* Setting `update` to 'none' means the refresh is * invisible so that we don't see previous crosshair * lines as the mousemoves. */ chart.update('none'); const x = mousemove.offsetX; const y = mousemove.offsetY; const { ctx, chartArea: {top, bottom, left, right, width, height} } = chart; ctx.save(); /* Draw items */ /* rgba(255,0,0,1) is solid red */ ctx.strokeStyle = 'rgba(255,0,0,1)'; ctx.lineWidth = 1; /* Only draw crosshairs if mouse is inside the chart area. * Remember 'y' is measured top-down. */ if(x >= left && x <= right && y >= top && y <= bottom) { /* Draw horizontal line */ ctx.beginPath(); ctx.moveTo(left, y); ctx.lineTo(right, y); ctx.stroke(); ctx.closePath(); /* Draw vertical line */ ctx.beginPath(); ctx.moveTo(x, top); ctx.lineTo(x, bottom); ctx.stroke(); ctx.closePath(); } ctx.restore(); } // End of crosshair() function <div id="chart_container" class="plot" style="width:50%;"> <div> <canvas id="myChart"></canvas> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.0/chart.umd.js" integrity="sha512-6HrPqAvK+lZElIZ4mZ64fyxIBTsaX5zAFZg2V/2WT+iKPrFzTzvx6QAsLW2OaLwobhMYBog/+bvmIEEGXi0p1w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
如果关联的数据大于0,我想将x轴标签加粗。看起来很简单,但做不到......这是我的代码: 选项: { 动画:假, 尺度:{ X: { 格...