【问题标题】:Highcharts: Make the legend symbol a square or rectangleHighcharts:使图例符号为正方形或矩形
【发布时间】:2014-12-16 17:49:46
【问题描述】:

我正在尝试将图例符号设为折线图的正方形或矩形。 Example

线路很好。我不想改变线宽。 HTML:

<script src="http://code.highcharts.com/highcharts.js"></script>

<div id="container" style="height: 400px"></div>

Javascript:

$(function () {
    var chart = new Highcharts.Chart({
        chart: {
        renderTo: 'container',
        type: 'line',
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },

        plotOptions: {
            series: {
                marker: {
                    enabled: false
                }
            }
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            symbolHeight:100,
            borderWidth: 0
        },

        series: [{
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
        }]
    });
});

我尝试在图例中添加 symbolHeight。但它不起作用。

legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            symbolHeight:100,
            borderWidth: 0
        },

如何增加线符号的高度使其变成矩形或正方形?

【问题讨论】:

标签: javascript jquery css highcharts


【解决方案1】:

可以通过配置实现方形图例符号。只需将legend.symbolRadius 值设置为0

JSFiddle 演示:https://jsfiddle.net/9bzy2qzq/

【讨论】:

  • 您的演示包含柱形图,但要求提供折线图的解决方案。将类型更改为“行”时,它显然不起作用。
  • 我很感激! :) 谢谢
【解决方案2】:

这是问题的副本:How to access legendSymbols and change their shape in HighCharts

它有一个类似的答案和另外两个:

第一个选项:

Highcharts.seriesTypes.line.prototype.drawLegendSymbol = 
Highcharts.seriesTypes.area.prototype.drawLegendSymbol;

第二个选项:

您可以更改路径元素上的stroke-width 属性。

我们可以为 Highcharts 提供在绘制图表时将绘制的函数。由于redraw 在第一次绘图时没有被调用,所以需要load 事件

chart: {
    events: {
        load: function () { 
            $(".highcharts-legend-item path").attr('stroke-width', 10);
        },
        redraw: function () {
            $(".highcharts-legend-item path").attr('stroke-width', 10);
        }
    }
},

【讨论】:

    【解决方案3】:

    您可以如下制作一个假系列并为其提供提供者标记。

    $(function () {
    var chart = new Highcharts.Chart({
        chart: {
        renderTo: 'container',
        type: 'line',
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
    
        plotOptions: {
            series: {
                marker: {
                    enabled: true
                }
            }
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
    
            //borderWidth: 0
        },
    
        series: [{
    
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
            showInLegend : false,
    
    
            marker:{enabled:false}
    
        },{
            name : "testing",
            data : {},
            marker : {symbol : 'square',radius : 12 }
        }
                ]
    });
    });
    

    工作演示:DEMO

    【讨论】:

    • 怎么做一个圆圈?
    【解决方案4】:

    所有答案都是正确的,但我发现了一个非常黑客的方法。用正方形替换图例矩形符号:

    legend: {
       symbolHeight: 12,
       symbolWidth: 12,
       symbolRadius: 6
    }
    

    JsFiddle

    【讨论】:

    • 这不适用于问题中指定的折线图
    【解决方案5】:

    对于矩形图例,我们需要设置squareSymbol: false

    Highcharts.chart('container', {
        chart: {
           type: 'column'
        },
    
        title: {
           text: 'Round legend symbols'
        },
    
        xAxis: {
           categories: ['Jan', 'Feb', 'Mar', 'Apr']
        },
    
        legend: {
           symbolWidth: 16,
           symbolRadius: 0,
           squareSymbol: false
        },
    
        series: [{
            data: [1, 3, 2, 4]
        }, {
            data: [6, 4, 5, 3]
        }, {
            data: [2, 7, 6, 5]
        }]
    
    });
    <script src="https://code.highcharts.com/highcharts.js"></script>
    
    <div id="container" style="height: 400px"></div>

    【讨论】:

    • 问题是关于折线图。如果您将类型更改为“行”而不是“列”,它将不再起作用。
    • 是的! - 这有助于我获得矩形符号。谢谢!
    【解决方案6】:

    由于Highcharts 5 引入了样式模式,您可以轻松找到符号元素,并更改它们的属性。使符号为正方形:

    $(".highcharts-legend-item path").attr('stroke-width',16);
    

    http://jsfiddle.net/n3h2totc/23/

    【讨论】:

      【解决方案7】:

      如果你想要一个圆形符号,你可以使用这个: http://jsfiddle.net/kL5sghrx/3/

      chart: {
          events: {
              load: function(){            
      		$( ".highcharts-legend-item path" ).each(function( index ) {
      			$(this)
      			.attr('d','M10.1,15.3L10.1,15.3c-3,0-5.5-2.5-5.5-5.5v0c0-3,2.5-5.5,5.5-5.5h0c3,0,5.5,2.5,5.5,5.5v0 C15.6,12.8,13.2,15.3,10.1,15.3z')
      			.attr('fill', $( this ).attr('stroke'))
      			.attr('stroke-dasharray','0,0'); 
      		});
            	  },
            redraw: function(){            
      		$( ".highcharts-legend-item path" ).each(function( index ) {
      			$(this)
      			.attr('d','M10.1,15.3L10.1,15.3c-3,0-5.5-2.5-5.5-5.5v0c0-3,2.5-5.5,5.5-5.5h0c3,0,5.5,2.5,5.5,5.5v0 C15.6,12.8,13.2,15.3,10.1,15.3z')
      			.attr('fill', $( this ).attr('stroke'))
      			.attr('stroke-dasharray','0,0'); 
      		});
              }
          },
       }

      【讨论】:

      • 我从 HighSoft 支持人员那里收到了这个消息:如果您启用折线图的标记,您会看到图例项也会发生变化。作为一种解决方法,您也可以用列标记覆盖行标记。看看下面的两个例子。 API 参考:api.highcharts.com/highcharts/series.line.marker 示例:jsfiddle.net/j53pbxb1 - 启用标记 jsfiddle.net/q4Lrabpx - 列系列中的标记 Highcharts.seriesTypes.line.prototype.drawLegendSymbol = Highcharts.seriesTypes.column.prototype.drawLegendSymbol;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多