`

Hightcharts 自定义legend的symbol的样式

阅读更多

要自定义Highcharts的legend中,每个系列名字前的图标(symbol)的样式,除了在初始化图时使用官方提供的有限的参数,还可以重写Highcharts.seriesTypes[type].prototype.drawLegendSymbol这个函数。type是图的类型,函数会传入两个参数,分别是legend和item。

官方默认的的Area图的drawLegendSymbol函数如下:

 

/**
* Get the series' symbol in the legend
* 
* @param {Object} legend The legend object
* @param {Object} item The series (this) or point
*/
drawLegendSymbol: function (legend, item) {
		
    item.legendSymbol = this.chart.renderer.rect(
        0, //方块的左上角点的x坐标
        legend.baseline - 11, //方块的左上角点的y坐标
        legend.options.symbolWidth,   // 这个就是chart初始化参数中legend里设置的symbolWidth属性,是方块的宽
        12, // 是方块的高
        2 // 圆角的半径
    ).attr({
        zIndex: 3
    }).add(item.legendGroup);		
		
}

假如修改了方块左上角点的x位置,那么为了不让方块覆盖到文字上,则初始化chart时,legend对象的symbolPadding属性也要做对应的设置。例如:

左上角点是0 + 20,则symbolPadding要设置也成20。

 

官方代码中的另外一个函数:

 

/**
 * Get the series' symbol in the legend. This method should be overridable to create custom
 * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbol.注意:官方注释写错了,写成了drawLegendSymbols,多了一个s
 * 
 * @param {Object} legend The legend object
 */
drawLegendSymbol: function (legend) {
	
	var options = this.options,
		markerOptions = options.marker,
		radius,
		legendOptions = legend.options,
		legendSymbol,
		symbolWidth = legendOptions.symbolWidth,
		renderer = this.chart.renderer,
		legendItemGroup = this.legendGroup,
		baseline = legend.baseline,
		attr;
		
	// Draw the line
	if (options.lineWidth) {
		attr = {
			'stroke-width': options.lineWidth
		};
		if (options.dashStyle) {
			attr.dashstyle = options.dashStyle;
		}
		this.legendLine = renderer.path([
			M,
			0,
			baseline - 4,
			L,
			symbolWidth,
			baseline - 4
		])
		.attr(attr)
		.add(legendItemGroup);
	}
	
	// Draw the marker
	if (markerOptions && markerOptions.enabled) {
		radius = markerOptions.radius;
		this.legendSymbol = legendSymbol = renderer.symbol(
			this.symbol,
			(symbolWidth / 2) - radius,
			baseline - 4 - radius,
			2 * radius,
			2 * radius
		)
		.add(legendItemGroup);
	}
}

 drawLegendSymbol函数中定义的radius属性,会在Legend.propotype中的colorizeItem函数中被覆盖掉:

/**
 * Set the colors for the legend item
 * @param {Object} item A Series or Point instance
 * @param {Object} visible Dimmed or colored
 */
colorizeItem: function (item, visible) {
	var legend = this,
		options = legend.options,
		legendItem = item.legendItem,
		legendLine = item.legendLine,
		legendSymbol = item.legendSymbol,
		hiddenColor = legend.itemHiddenStyle.color,
		textColor = visible ? options.itemStyle.color : hiddenColor,
		symbolColor = visible ? item.color : hiddenColor,
		markerOptions = item.options && item.options.marker,
		symbolAttr = {
			stroke: symbolColor,
			fill: symbolColor
		},
		key,
		val;

	
	if (legendItem) {
		legendItem.css({ fill: textColor });
	}
	if (legendLine) {
		legendLine.attr({ stroke: symbolColor });
	}
	
	if (legendSymbol) {
		
		// Apply marker options
		if (markerOptions) {
			markerOptions = item.convertAttribs(markerOptions);
			for (key in markerOptions) {
				val = markerOptions[key];
				if (val !== UNDEFINED) {
					symbolAttr[key] = val;
				}
			}
		}

		legendSymbol.attr(symbolAttr); // 这句执行完之后,会给legendSymbol这个对象添加 r=4 这个值,就会影响symbol的圆角。
	}

 上面函数中的markerOptions = item.options && item.options.marker这句,给markerOptions赋值,它的值是:

markerOptions : {
	enabled: false,
	lineColor: "#FFFFFF",
	lineWidth: 0,
	radius: 4,// 这个用这个值,给legendSymbol对象增加了r=4的属性,导致最终生成的SVGElement对象的rx,ry都设置成4,出现了圆角。
	states: Object
}

 这些值来自chart初始化参数plotOptions的series的marker属性。

 

分享到:
评论

相关推荐

    Advanced Legend Symbol Label Tool for arcgis

    A utility designed to make it much easier to create custom legend labels based on the data contained in the attribute table of a feature layer. http://www.maplogic.com/

    winfrom自带的chart控件增加legend选中选项

    总之,通过C#编程,我们可以克服WinForms Chart控件默认功能的限制,自定义实现Legend的选中功能,为用户提供更加交互性的图表体验。在实际开发过程中,理解控件的工作原理,熟练掌握事件处理和坐标转换是实现此类...

    Hightcharts 案例 图表 报表

    ### Hightcharts 案例 图表 报表 #### 一、Highcharts 简介 Highcharts 是一种基于 JavaScript 的开源图表库,广泛应用于 Web 开发领域以实现动态图表展示的功能。它具备以下几个特点: 1. **简单易用**:...

    对echarts压缩包进行修改当legend过多时可以进行翻页

    4. **样式调整**:为了适应分页,可能需要修改 legend 的样式,如按钮的样式、间距等,以保持整体视觉效果的一致性。 5. **API 扩展**:为了让用户能够配置和控制 legend 分页,可能需要扩展 ECharts 的 API,例如...

    C#一个很好的绘图实例用到自定义Chart多种显示方式

    此外,`Legend`属性用于设置图例,可以调整其位置、样式和内容。 在描述中提到的“显示多种图例”,这通常涉及到多个数据系列和对应的图例。我们可以通过`Series.Add()`方法添加新的数据系列,并分别设置每个系列的...

    实现在C#程序中实现自定义图例功能

    例如,在某些情况下,用户可能希望改变图例的样式、位置或者内容等,这就需要开发者提供相应的自定义功能。 #### 二、技术栈与环境 本教程将基于以下技术栈: - **开发语言**:C# - **开发环境**:Visual Studio ...

    sketch-symbol-legend:所有符号的传奇

    它会创建一个文本符号,其符号在Symbol的上方,并添加该符号的定义以及在画板下有任何overrides的overrides 。 请注意,只有在SymbolInstance上将其override ,它才会添加override 。 功能请求和拉取请求非常受欢迎...

    hightcharts

    在实际应用中,你可能还需要考虑其他高级特性,如工具提示(tooltip)、图例(legend)、缩放和滚动(navigator和scrollbar)、数据加载事件等。Highcharts提供丰富的API和插件,可以满足大多数复杂的图表需求。 ...

    Matlab中图例注释函数legend详解

    其中,字符串 1、字符串 2、字符串 3 等是注释信息,参数是用于控制注释视窗的位置和样式的参数。 参数的含义 参数字符串的含义如下所示: * 0:尽量不与数据冲突,自动放置在最佳位置 * 1:放置在图形的右上角 *...

    自定义的flash chart(legend交互,多数据提示,双轴坐标,混合图表)

    flash builder建的actionscript项目,flash chart,现实了legend交互,多数据提示,双轴坐标,格式化坐标显示(可带单位),piechart,linechart,columnchart,combinechart(混合图表)

    前端项目-chartist-plugin-legend.zip

    此外,`chartist-plugin-legend`还支持更多的自定义配置,例如,你可以改变图例项的样式,如颜色、字体大小等,还可以通过监听事件来实现更复杂的交互效果。通过深入阅读插件文档,开发者可以根据实际需求调整和扩展...

    ARCGIS Engine 开发:在Page Layout上添加Legend

    4. **配置Legend**:我们可以调整Legend的样式,例如字体、大小、颜色等,通过`LegendClass`的属性进行设置。还可以控制图例的展开/折叠状态,以及是否显示子图层。 5. **创建Layout View**:一旦Map Control和...

    echarts legend 排列问题

    legend 图例组件可以分组展示。详细说明:https://blog.csdn.net/qq_36437172/article/details/106125254

    ArcGIS js api 4+版本 draw measure legend扩展

    此外,`Measure`还支持自定义样式和事件处理,如`on('measure-end')`,以便在测量完成后执行特定操作。 三、图例(Legend) 图例是地图的重要组成部分,它解释了地图上颜色、符号和图案的含义。在ArcGIS JS API 4.x...

    legend绘图部分标注问题

    ### Legend在MATLAB中的部分标注问题详解 #### 引言 在进行数据分析和可视化时,图例(Legend)是图表中不可或缺的一部分,它能够帮助读者理解图表中的各个数据系列所代表的意义。MATLAB作为一种广泛使用的科学...

    test_legend.zip_Legend_gridLegend_matlab gridlegend

    4. **可自定义样式**:可以设置图例的字体、颜色、边框等属性,以匹配整个图形的风格。 在`test_legend.m`这个脚本文件中,我们可以预期看到如何使用`gridlegend`的实例。通常,这样的代码会包含以下步骤: 1. 创建...

    linux文件传送工具Legend源码

    Legend文件传送软件是运行在Linux下的一款自由软件,它提供了在linux环境下局域网文件传送的方法,目前次版本支持多个文件同时传送接收,添加临时用户,修改用户个性头像,修改自己昵称的功能。在软使用方面,以用户...

    linux文件传送工具Legend

    Legend文件传送软件是运行在Linux下的一款自由软件,它提供了在linux环境下局域网文件传送的方法,目前次版本支持多个文件同时传送接收,添加临时用户,修改用户个性头像,修改自己昵称的功能。在软使用方面,以用户...

    matlab开发-legend1m

    在MATLAB编程环境中,"legend1m"是一个用于创建和控制图形图例的自定义函数。这个函数的设计目的是为了更灵活地调整图例中的行和文本项,提供比MATLAB内置`legend`函数更为精细的控制。下面我们将深入探讨与这个主题...

    自定义问卷调查模版.zip

    开发者可以使用HTML5的新特性,如`<fieldset>`和`<legend>`来组织问题组,`<input>`标签来创建各种类型的输入控件,如单选框、多选框或文本输入框,以及`<button>`来设置提交或重置问卷的按钮。 其次,JavaScript...

Global site tag (gtag.js) - Google Analytics