- Notifications
You must be signed in to change notification settings - Fork613
Liquid Fill Chart for Apache ECharts
License
ecomfe/echarts-liquidfill
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Liquid Fill Chart plugin forApache ECharts, which is usually used to represent data in percentage.
To use ECharts plugins, you need to include the plugin JavaScript file after ECharts file.
<scriptsrc='echarts.js'></script><scriptsrc='echarts-liquidfill.js'></script>
ECharts can be downloaded atGitHub dist directory orDownload page of Official Website (in Chinese).
The minimum package of ECharts required by LiquidFill Chart issimple version on GitHub, or selecting nothing inonline builder (in Chinese). If you need other chart types or components in your other chart, you should include them accordingly.
# install echarts as peer dependencynpm install echartsnpm install echarts-liquidfillNOTE:
echarts-liquidfill@3 is compitable with echarts@5echarts-liquidfill@2 is compitable with echarts@4
Import:
import*asechartsfrom'echarts';import'echarts-liquidfill'
Or:
import*asechartsfrom'echarts/core';import'echarts-liquidfill'
Here is the basic example on CodeSandbox
You may download the lastest ECharts files onECharts official site and download this plugin indist directory.
Note that if you need tooltip for Liquid Fill Chart, you need the complete ECharts version. Otherwise, the simple version will be competent.
Since ECharts v4.0.0,normal is no longer needed foritemStyle orlabel.
SinceECharts v3.7.0,textStyle option is flatten, so thatseries.label[normal|emphasis].textStyle.xxx is now can be written inseries.label[normal|emphasis].textStyle. This is supported fromecharts-liquidfill v1.0.6. So if you found examples withtextStyle in old demo, don't be too surprised.
Here are some common uses:
- Use multiple waves in a chart
- Change waves color and opacity
- Make waves static
- Water with no waves
- Set attributes for a single wave
- Change background and border style
- Hide outline in chart
- Change shape with SVG
- Setup animation
- Change text content and style
- Change shadow style
- Setup tooltip
- Click event
- Make an element non-interactable
To ask a question, you may forkLiquid Fill Chart Example on Gallery and copy your code there. Then you mayopen an issue in this project.
To create a Liquid Fill Chart, you need to have a series with type of'liquidFill'. A basic option may be:
varoption={series:[{type:'liquidFill',data:[0.6]}]};
It is easy to create a liquid fill chart will multiple waves, either to represent multiple data, or to improve the visual effect of the chart.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3]}]};
This creates a chart wit waves at position of 60%, 50%, 40%, and 30%.
To set colors for liquid fill chart series, setcolor to be an array of colors. To set opacity, useitemStyle.opacity anditemStyle.emphasis.opacity for normal style and hover style.
varoption={series:[{type:'liquidFill',data:[0.5,0.4,0.3],color:['red','#0f0','rgb(0, 0, 255)'],itemStyle:{opacity:0.6},emphasis:{itemStyle:{opacity:0.9}}}]};
You may also set the color and opacity of a single data item by:
varoption={series:[{type:'liquidFill',data:[0.5,0.4,{value:0.3,itemStyle:{color:'red',opacity:0.6},emphasis:{itemStyle:{opacity:0.9}}}]}]};
To provent the waves from moving left or right, you may simply setwaveAnimation to befalse. To disable the animation of waves raising, setanimationDuration andanimationDurationUpdate to be 0.
varoption={series:[{type:'liquidFill',waveAnimation:false,animationDuration:0,animationDurationUpdate:0,data:[0.6,0.5,0.4,0.3]}]};
You may set theamplitude to be 0 to make still waves.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],amplitude:0,waveAnimation:0}]};
It is recommended to setwaveAnimation to be false in this case to disable animation for performance consideration.
To change a single wave, overwrite the options in data item.
varoption={series:[{type:'liquidFill',data:[0.6,{value:0.5,direction:'left',itemStyle:{color:'red'}},0.4,0.3]}]};
You can use backgroundStyle option to set the stroke, fill style of background shape.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],backgroundStyle:{borderWidth:5,borderColor:'red',color:'yellow'}}]};
To hide the outline, just setoutline.show to befalse.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],outline:{show:false}}]};
Shape of water fill chart. It can be:
- one of the default symbols:
'circle','rect','roundRect','triangle','diamond','pin','arrow'; 'container': a shape that fully fills the container.- an SVG path starting with
'path://'.
varoptions=[{series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],shape:'diamond'}]}];
option = { series: [{ type: 'liquidFill', data: [0.5, 0.4, 0.3, 0.2], shape: 'container', outline: { show: false } }]};varoption={series:[{type:'liquidFill',data:[0.6,0.55,0.4,0.25],radius:'60%',outline:{show:false},backgroundStyle:{borderColor:'#156ACF',borderWidth:1,shadowColor:'rgba(0, 0, 0, 0.4)',shadowBlur:20},shape:'path://M367.855,428.202c-3.674-1.385-7.452-1.966-11.146-1.794c0.659-2.922,0.844-5.85,0.58-8.719 c-0.937-10.407-7.663-19.864-18.063-23.834c-10.697-4.043-22.298-1.168-29.902,6.403c3.015,0.026,6.074,0.594,9.035,1.728 c13.626,5.151,20.465,20.379,15.32,34.004c-1.905,5.02-5.177,9.115-9.22,12.05c-6.951,4.992-16.19,6.536-24.777,3.271 c-13.625-5.137-20.471-20.371-15.32-34.004c0.673-1.768,1.523-3.423,2.526-4.992h-0.014c0,0,0,0,0,0.014 c4.386-6.853,8.145-14.279,11.146-22.187c23.294-61.505-7.689-130.278-69.215-153.579c-61.532-23.293-130.279,7.69-153.579,69.202 c-6.371,16.785-8.679,34.097-7.426,50.901c0.026,0.554,0.079,1.121,0.132,1.688c4.973,57.107,41.767,109.148,98.945,130.793 c58.162,22.008,121.303,6.529,162.839-34.465c7.103-6.893,17.826-9.444,27.679-5.719c11.858,4.491,18.565,16.6,16.719,28.643 c4.438-3.126,8.033-7.564,10.117-13.045C389.751,449.992,382.411,433.709,367.855,428.202z',label:{position:['38%','40%'],formatter:function(){return'ECharts\nLiquid Fill';},fontSize:40,color:'#D94854'}}]};
Generally speaking, there are two types of animations in liquid fill charts.
The first type is initial animation, which has the effect of wave raising. The easing method of this animation is controlled withanimationEasing and its duration withanimationDuration.
The second type is the update animation, which is usually used when data changes and wave height changes. They are controlled withanimationEasingUpdate andanimationDurationUpdate.
For example, to disable the raising animation and set update animation time to be two seconds withcubicOut easing, you can use the following option:
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],animationDuration:0,animationDurationUpdate:2000,animationEasingUpdate:'cubicOut'}]};chart.setOption(option);setTimeout(function(){chart.setOption({series:[{type:'liquidFill',data:[0.8,0.6,0.4,0.2]}]})},3000);
By default, the text label of liquid fill chart displays percentage of the first data. For example, for a chart with data[0.6, 0.5, 0.4, 0.3], default text is60%.
To change the text, you may uselabel.formatter, which can be set to a string or function.
If it is a string,{a} refers to series name,{b} to data name, and{c} to data value.
varoption={series:[{type:'liquidFill',name:'Liquid Fill',data:[{name:'First Data',value:0.6},0.5,0.4,0.3],label:{formatter:'{a}\n{b}\nValue: {c}',fontSize:28}}]};
Label text of this example is'Liquid Fill\nFirst Data\nValue: 0.6'.
This has the same result as usingformatter as a function:
varoption={series:[{type:'liquidFill',name:'Liquid Fill',data:[{name:'First Data',value:0.6},0.5,0.4,0.3],label:{formatter:function(param){returnparam.seriesName+'\n'+param.name+'\n'+'Value:'+param.value;},fontSize:28}}]};
Text position is at the center by default.label.position can be set to be'inside','left','right','top','bottom', or horizontal and vertical positions like['10%', '20%'], which means'10%' to the left (controlled bylabel.align, which can be'left','center', or'right') and'20%' to the top (controlled bylabel.baseline, which can be'top','middle', or'bottom').
By default, waves and outline have shadow on them. Here's how to change them.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],itemStyle:{shadowBlur:0},outline:{borderDistance:0,itemStyle:{borderWidth:5,borderColor:'#156ACF',shadowBlur:20,shadowColor:'rgba(255, 0, 0, 1)'}}}]};
To add tooltip:
varoption={series:[{type:'liquidFill',data:[0.6],name:'Liquid Fill'}],tooltip:{show:true}};
To add click event on waves:
chart.setOption(option);chart.on('click',function(){console.log(arguments);// do something useful here});
Like any other chart types, the above code will only trigger events on waves. If you want to track events on the whole canvas or specific elements, you may add listener to zrender like:
chart.getZr().on('click',function(){console.log(arguments);});
To make an element (e.g., a wave) non-interactable, simply setsilent to betrue.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],silent:true}]};
Default option for liquid fill charts are:
{data:[],color:['#294D99','#156ACF','#1598ED','#45BDFF'],center:['50%','50%'],radius:'50%',amplitude:'8%',waveLength:'80%',phase:'auto',period:'auto',direction:'right',shape:'circle',waveAnimation:true,animationEasing:'linear',animationEasingUpdate:'linear',animationDuration:2000,animationDurationUpdate:1000,outline:{show:true,borderDistance:8,itemStyle:{color:'none',borderColor:'#294D99',borderWidth:8,shadowBlur:20,shadowColor:'rgba(0, 0, 0, 0.25)'}},backgroundStyle:{color:'#E3F7FF'},itemStyle:{opacity:0.95,shadowBlur:50,shadowColor:'rgba(0, 0, 0, 0.4)'},label:{show:true,color:'#294D99',insideColor:'#fff',fontSize:50,fontWeight:'bold',align:'center',baseline:'middle'position:'inside'},emphasis:{itemStyle:{opacity:0.8}}}
Value of each data item should be between 0 and 1.
The data item can also be an object to configure the option for a single item.
varoption={series:[{type:'liquidFill',data:[0.6,{value:0.5,itemStyle:{color:'red'}},0.4,0.3]}]};
This defines a chart with the second wave of red color.
Wave colors.
Shape of water fill chart. It can be one of the default symbols:'circle','rect','roundRect','triangle','diamond','pin','arrow'. Or, an SVG path starting with'path://'.
Position of the chart. The first value is x position, the second one is the y position. Each of the values can be a relative value like'50%', which is relative to the smaller value of container width and height, or an absolute value like100px.
Radius of the chart, which can be a relative value like'50%', which is relative to the smaller value of container width and height, or an absolute value like100px.
Amplitude of the wave, in pixels or percentage. If it is in percentage, it's relative to the diameter.
Wave length of the wave, which can be a relative value like'50%', which is relative to the diameter, or an absolute value like'100px' or100.
Phase of wave, in radian system. By default, it is set to be'auto', when each wave has a phase ofMath.PI / 4 larger than the previous one.
Milliseconds that it takes to move forward a wave-length. By default, it is set to be'auto', when the wave at the front has a greater speed.
It can also be a formatter function.
varoption={series:[{type:'liquidFill',data:[0.6,0.5,0.4,0.3],radius:'70%',phase:0,period:function(value,index){// This function is called four times, each for a data item in series.// `value` is 0.6, 0.5, 0.4, 0.3, and `index` is 0, 1, 2, 3.return2000*index+1000;}}]}
Direction that the waves moving in, which should either be'right', or'left'.
Whether to enable wave from moving left or right.
Easing methods for initial animation, when waves raise from the bottom at the beginning.
Easing methods for other animation, for example, when data value changes and wave position changes.
Initial animation duration, in milliseconds.
Other animation duration, in milliseconds.
Whether to display outline.
Distance between border and inner circle.
Border color.
Border width.
Outline shadow blur size.
Outline shadow color.
Background fill color.
Background stroke line width.
Background stroke line width.
Background shadow blur size.
Background shadow color.
Background opacity.
Wave opacity.
Wave shadow width.
Wave shadow color.
Wave opacity when hover.
Whether to display label text.
Color of text when display on background.
Color of text when display on wave.
Label font size.
Label font weight.
Text align, which should be'left','center', or'right'.
Text vertical align, which should be'top','middle', or'bottom'.
Text position is at the center by default.label.position can be set to be'inside','left','right','top','bottom', or horizontal and vertical positions like['10%', '20%'], which means'10%' to the left and'20%' to the top.
For development:
$ webpackFor release:
$ webpack -pThe Apache Software FoundationApache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of theApache Software Foundation.
About
Liquid Fill Chart for Apache ECharts
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
















