echarts的柱狀圖立體效果解決方案 echarts.graphic.LinearGradient

最近用的echarts的柱狀圖,客戶需要有立體的效果,需要echarts的漸變色生成器echarts.graphic.LinearGradient實現,特記錄一下解決方法:

效果圖如下

代碼如下(主要配置color):

var myChart = echarts
				.init(document.getElementById('main3'), 'macarons');
		// 指定圖表的配置項和數據
		var jobGrade1Data = [];
		var countData = [];
		for ( var i = 0; i < data.list.length; i++) {
			jobGrade1Data[i] = data.list[i].jobGrade1;
			countData[i] = data.list[i].count;
		}
		option = {
			title : {
				text : '職級情況分析(人數:'+data.num+')',
				subtext : '',
				left : 'center'
			},
			tooltip : {
				trigger : 'axis',
				axisPointer : {
					type : 'none'
				}
			},
			xAxis : [ {
				type : 'category',
				data : jobGrade1Data
			} ],
			yAxis : [ {
				type : 'value'
			} ],
			series : [ {
				name : '人數',
				type : 'bar',
				data : countData,
				itemStyle : {
					normal : {
						label : {
							show : true,
							//開啓顯示
							position : 'top',
							//在上方顯示
							textStyle : { //數值樣式
							// fontSize: 16
							}
						},
          color: function (params){
            //數組定義的一種顏色
            var colorList = [
                    ['#f24a78','#fedce6','#f24a78']
                   ];
 
                              var index=params.dataIndex;
                              if(params.dataIndex >= colorList.length){
                                      index=params.dataIndex%colorList.length;
                               }
 
                  return new echarts.graphic.LinearGradient(1,0, 0, 0,
                  [
                     {offset: 0, color: colorList[0][0]},
                     {offset: 0.5, color: colorList[0][1]},
                     {offset: 1, color: colorList[0][2]}
                  ]);
          },
          barBorderRadius: 5  //柱狀角成橢圓形
        }
				}

			} ],
			axisLabel : {//座標軸刻度標籤的相關設置。
				formatter : function(params) {
					var newParamsName = "";// 最終拼接成的字符串
					var paramsNameNumber = params.length;// 實際標籤的個數
					var provideNumber = 3;// 每行能顯示的字的個數
					var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 換行的話,需要顯示幾行,向上取整
					/**
					 * 判斷標籤的個數是否大於規定的個數, 如果大於,則進行換行處理 如果不大於,即等於或小於,就返回原標籤
					 */
					// 條件等同於rowNumber>1
					if (paramsNameNumber > provideNumber) {
						/** 循環每一行,p表示行 */
						for ( var p = 0; p < rowNumber; p++) {
							var tempStr = "";// 表示每一次截取的字符串
							var start = p * provideNumber;// 開始截取的位置
							var end = start + provideNumber;// 結束截取的位置
							// 此處特殊處理最後一行的索引值
							if (p == rowNumber - 1) {
								// 最後一次不換行
								tempStr = params.substring(start,
										paramsNameNumber);
							} else {
								// 每一次拼接字符串並換行
								tempStr = params.substring(start, end) + "\n";
							}
							newParamsName += tempStr;// 最終拼成的字符串
						}

					} else {
						// 將舊標籤的值賦給新標籤
						newParamsName = params;
					}
					//將最終的字符串返回
					return newParamsName
				}

			}
		};

		// 使用剛指定的配置項和數據顯示圖表。
		myChart.setOption(option);
        //點擊事件
        myChart.on('click', function (params) { 
		//alert(params.name);
		});

多種顏色的demo:

代碼:

var myChart = echarts
				.init(document.getElementById('main1'), 'macarons');
		// 指定圖表的配置項和數據
		option = {
			title : {
				text : '年齡情況分析(人數:' + data.ageAll + ')',
				subtext : '',
				left : 'center'
			},
			tooltip : {
				trigger : 'axis',
				axisPointer : {
					type : 'shadow'
				}
			},
			xAxis : [ {
				type : 'category',
				data : [ '30歲及以下', '31-35歲', '36-40歲', '41-45歲', '46-50歲',
						'51-55歲', '56-60歲', '60歲以上' ]
			} ],
			yAxis : [ {
				type : 'value'
			} ],
			series : [ {
				name : '人數',
				type : 'bar',
				data : [ data.age30, data.age31, data.age36, data.age41,
						data.age46, data.age51, data.age56, data.age60 ],
				itemStyle : {
					normal:{
					label : {contentType: false,
							show : true,
							//開啓顯示
							position : 'top',
							//在上方顯示
							textStyle : { //數值樣式
							// fontSize: 16
							}
						},
          //每個柱子的顏色即爲colorList數組裏的每一項,如果柱子數目多於colorList的長度,則柱子顏色循環使用該數組
          color: function (params){
            //注意顏色值循環使用
            var colorList = [
                    ['#f24a78','#fedce6','#f24a78'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
['#1324b4','#d6dafa','#1324b4'],
                   ];
 
                              var index=params.dataIndex;
                              if(params.dataIndex >= colorList.length){
                                      index=params.dataIndex%colorList.length;
                               }
 
                  return new echarts.graphic.LinearGradient(1,0, 0, 0,
                  [
                     {offset: 0, color: colorList[index][0]},
                     {offset: 0.5, color: colorList[index][1]},
                     {offset: 1, color: colorList[index][2]}
                  ]);
          },
          barBorderRadius: 5  //柱狀角成橢圓形
        }
				}

			} ],
			axisLabel : {//座標軸刻度標籤的相關設置。
				formatter : function(params) {
					var newParamsName = "";// 最終拼接成的字符串
					var paramsNameNumber = params.length;// 實際標籤的個數
					var provideNumber = 5;// 每行能顯示的字的個數
					var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 換行的話,需要顯示幾行,向上取整
					/**
					 * 判斷標籤的個數是否大於規定的個數, 如果大於,則進行換行處理 如果不大於,即等於或小於,就返回原標籤
					 */
					// 條件等同於rowNumber>1
					if (paramsNameNumber > provideNumber) {
						/** 循環每一行,p表示行 */
						for ( var p = 0; p < rowNumber; p++) {
							var tempStr = "";// 表示每一次截取的字符串
							var start = p * provideNumber;// 開始截取的位置
							var end = start + provideNumber;// 結束截取的位置
							// 此處特殊處理最後一行的索引值
							if (p == rowNumber - 1) {
								// 最後一次不換行
								tempStr = params.substring(start,
										paramsNameNumber);
							} else {
								// 每一次拼接字符串並換行
								tempStr = params.substring(start, end) + "\n";
							}
							newParamsName += tempStr;// 最終拼成的字符串
						}

					} else {
						// 將舊標籤的值賦給新標籤
						newParamsName = params;
					}
					//將最終的字符串返回
					return newParamsName
				}

			}
		};

		// 使用剛指定的配置項和數據顯示圖表。
		myChart.setOption(option);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章