【问题标题】:How to change tooltip on Angular Chart.js如何更改 Angular Chart.js 上的工具提示
【发布时间】:2014-12-21 14:41:44
【问题描述】:

所以,我在 ionic 应用程序上使用 angular-chart-js 插件(不确定是否相关)。

对于线性图表,默认情况下,当单击一个点时,我会得到一个工具提示,如下所示:

我想更改那个工具提示的内部,我在谷歌上找不到任何东西。

感谢任何帮助

【问题讨论】:

    标签: angularjs ionic-framework chart.js


    【解决方案1】:

    在您可以为图表指定的图表选项中,您可以创建一个函数来返回工具提示的模板。

    $scope.chart_options = {
        multiTooltipTemplate: function(label) {
            return label.label + ': ' + label.value;
        }
    }
    

    在你看来:

    <canvas id="" class="chart chart-bar" legend="true"
                  series="bar_series" colours="colors"
                  data="bar_data" labels="bar_labels"               
                  options="chart_options">
    

    标签对象的样子

    label = {value: 55, label: "8/18 - 8/24", datasetLabel: "Foo", 
             strokeColor: "rgba(178,145,47,1)", fillColor: "rgba(178,145,47,0.2)"…}
    

    编辑:multiTooltipTemplate 用于条形、线形等,其中每个 x 轴值都有多个数据点。对于馅饼或甜甜圈,您只需使用tooltipTemplate

    【讨论】:

    • 您知道是否可以将 html 添加到工具提示中吗?
    • 你能提供一个plunker吗?
    • 我试图重现但没有成功。请看@plnkr.co/edit/ZcVmVT2daZJCfqjAJdXA?p=preview
    • 您使用的是旧版本的角度图表,并且您也没有将图表选项传递给您的工作图表。据我所知,您不能在模板中包含 HTML,但 Chart.js 提供了许多自定义工具提示样式选项,您可以在此处看到:github.com/nnnick/Chart.js/blob/master/Chart.js 从第 124 行开始。您可以像 Chart.defaults.global.tooltipFontSize = 14; 一样使用它们用您要更改的任何选项替换 tooltipFontSize 。这是一个更新的 plunkr:plnkr.co/edit/2yZf5QtRVnWFNBwrPSJQ?p=preview
    • 这适用于条形图,但不适用于饼图。有什么建议吗?
    【解决方案2】:

    我知道这是一个老问题,但仅适用于其他寻找此问题的人 - 有一种更简单的方法可以全局自定义工具提示。

    在你的模块中:

    myApp.config(['ChartJsProvider', function (ChartJsProvider) {
    ChartJsProvider.setOptions({
        tooltipFillColor: '#EEE',
        tooltipFontColor: '#000',
        tooltipFontSize: 12,
        tooltipCornerRadius: 3
    });
    

    还有其他选项可以自定义工具提示以及几乎所有其他全局内容

                // Boolean - Whether to animate the chart
            animation: true,
    
            // Number - Number of animation steps
            animationSteps: 60,
    
            // String - Animation easing effect
            animationEasing: "easeOutQuart",
    
            // Boolean - If we should show the scale at all
            showScale: true,
    
            // Boolean - If we want to override with a hard coded scale
            scaleOverride: false,
    
            // ** Required if scaleOverride is true **
            // Number - The number of steps in a hard coded scale
            scaleSteps: null,
            // Number - The value jump in the hard coded scale
            scaleStepWidth: null,
            // Number - The scale starting value
            scaleStartValue: null,
    
            // String - Colour of the scale line
            scaleLineColor: "rgba(0,0,0,.1)",
    
            // Number - Pixel width of the scale line
            scaleLineWidth: 1,
    
            // Boolean - Whether to show labels on the scale
            scaleShowLabels: true,
    
            // Interpolated JS string - can access value
            scaleLabel: "<%=value%>",
    
            // Boolean - Whether the scale should stick to integers, and not show any floats even if drawing space is there
            scaleIntegersOnly: true,
    
            // Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
            scaleBeginAtZero: false,
    
            // String - Scale label font declaration for the scale label
            scaleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
    
            // Number - Scale label font size in pixels
            scaleFontSize: 12,
    
            // String - Scale label font weight style
            scaleFontStyle: "normal",
    
            // String - Scale label font colour
            scaleFontColor: "#666",
    
            // Boolean - whether or not the chart should be responsive and resize when the browser does.
            responsive: false,
    
            // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
            maintainAspectRatio: true,
    
            // Boolean - Determines whether to draw tooltips on the canvas or not - attaches events to touchmove & mousemove
            showTooltips: true,
    
            // Boolean - Determines whether to draw built-in tooltip or call custom tooltip function
            customTooltips: false,
    
            // Array - Array of string names to attach tooltip events
            tooltipEvents: ["mousemove", "touchstart", "touchmove", "mouseout"],
    
            // String - Tooltip background colour
            tooltipFillColor: "rgba(0,0,0,0.8)",
    
            // String - Tooltip label font declaration for the scale label
            tooltipFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
    
            // Number - Tooltip label font size in pixels
            tooltipFontSize: 14,
    
            // String - Tooltip font weight style
            tooltipFontStyle: "normal",
    
            // String - Tooltip label font colour
            tooltipFontColor: "#fff",
    
            // String - Tooltip title font declaration for the scale label
            tooltipTitleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
    
            // Number - Tooltip title font size in pixels
            tooltipTitleFontSize: 14,
    
            // String - Tooltip title font weight style
            tooltipTitleFontStyle: "bold",
    
            // String - Tooltip title font colour
            tooltipTitleFontColor: "#fff",
    
            // String - Tooltip title template
            tooltipTitleTemplate: "<%= label%>",
    
            // Number - pixel width of padding around tooltip text
            tooltipYPadding: 6,
    
            // Number - pixel width of padding around tooltip text
            tooltipXPadding: 6,
    
            // Number - Size of the caret on the tooltip
            tooltipCaretSize: 8,
    
            // Number - Pixel radius of the tooltip border
            tooltipCornerRadius: 6,
    
            // Number - Pixel offset from point x to tooltip edge
            tooltipXOffset: 10,
    
            // String - Template string for single tooltips
            tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>",
    
            // String - Template string for single tooltips
            multiTooltipTemplate: "<%= datasetLabel %>: <%= value %>",
    
            // String - Colour behind the legend colour block
            multiTooltipKeyBackground: '#fff',
    
            // Array - A list of colors to use as the defaults
            segmentColorDefault: ["#A6CEE3", "#1F78B4", "#B2DF8A", "#33A02C", "#FB9A99", "#E31A1C", "#FDBF6F", "#FF7F00", "#CAB2D6", "#6A3D9A", "#B4B482", "#B15928" ],
    
            // Array - A list of highlight colors to use as the defaults
            segmentHighlightColorDefaults: [ "#CEF6FF", "#47A0DC", "#DAFFB2", "#5BC854", "#FFC2C1", "#FF4244", "#FFE797", "#FFA728", "#F2DAFE", "#9265C2", "#DCDCAA", "#D98150" ],
    
            // Function - Will fire on animation progression.
            onAnimationProgress: function(){},
    
            // Function - Will fire on animation completion.
            onAnimationComplete: function(){}
    

    【讨论】:

      【解决方案3】:

      好吧,我需要更改我的工具提示,以使它们具有与各自标签相同的内容,但有一个细节:即使标签隐藏在图表中,也要做到这一点。像这样:

      上图显示了一个图表TIME x VALUE,其中时间间隔为 20 分钟。也就是说,我希望tooltips有各自的label值(例如:在图片上,我把鼠标放在时间18:10对应的值,间隔的一半)。

      我需要做的就是:

      1.在我的班级中创建一个静态数组(懒惰的方式使其更易于访问)

      public static arrayTooltip = [];
      

      2。初始化它并用标签的正确值填充它

      3。我隐藏了我想隐藏的标签(不用担心......由于第 2 步,数据是安全的)

      然后,在图表选项中,我做了这样的事情:

      tooltips: {
          enabled: true, 
          displayColors: false,
          xPadding: 15,
          yPadding: 15,
      
          callbacks: {
              title: function(tooltipItem, data) {
                  return "";
              },
      
              label: function(tooltipItem, data) {
                  return MyClassComponent.arrayTooltip[tooltipItem.index]
              }
          }
      
        },
      

      在上面的代码中,将注意力集中在回调上。我不想要标题,所以我把它留空了。关于标签,我获取了当前工具提示的索引(鼠标指向的那个)并在静态数组中使用它。它已经完成了。

      【讨论】:

        【解决方案4】:

        这是Plunker。用于演示目的。消息是this is a tooltip

        注意:您必须为完整的数组对象data 创建工具提示,供图表绘制。

        希望它能解决你的问题。

        【讨论】:

        • 您好,感谢您的回答。不幸的是,我使用的图表库与您使用的图表库不同
        • 问题是关于使用chart.js的angular-chart.js,而不是angular-charts和d3。
        猜你喜欢
        • 2015-08-10
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多