pink老師學習之Echarts
可視化面闆介紹
應對現在資料可視化的趨勢,越來越多企業需要在很多場景(營銷資料,生産資料,使用者資料)下使用,可視化圖表來展示展現資料,讓資料更加直覺,資料特點更加突出。
01-使用技術
完成該項目需要具備以下知識:
- div + css 布局
- flex 布局
- Less
- 原生js + jquery 使用
- rem适配
- echarts基礎
02- 案例适配方案
- 設計稿是1920px
- flexible.js 把螢幕分為 24 等份
-
cssrem 插件的基準值是 80px
插件-配置按鈕—配置擴充設定–Root Font Size 裡面 設定。
但是别忘記重新開機vscode軟體保證生效
03-基礎設定
- body 設定背景圖 ,縮放為 100% , 行高1.15
- css初始化
04-header 布局
- 高度為100px
- 背景圖,在容器内顯示
- 縮放比例為 100%
- h1 标題部分 白色 38像素 居中顯示 行高為 80像素
- 時間子產品 showTime 定位右側 right 為 30px 行高為 75px 文字顔色為:rgba(255, 255, 255, 0.7) 而文字大小為 20像素
// 格式: 目前時間:2020年3月17-0時54分14秒
<script>
var t = null;
t = setTimeout(time, 1000);//開始運作
function time() {
clearTimeout(t);//清除定時器
dt = new Date();
var y = dt.getFullYear();
var mt = dt.getMonth() + 1;
var day = dt.getDate();
var h = dt.getHours();//擷取時
var m = dt.getMinutes();//擷取分
var s = dt.getSeconds();//擷取秒
document.querySelector(".showTime").innerHTML = '目前時間:' + y + "年" + mt + "月" + day + "-" + h + "時" + m + "分" + s + "秒";
t = setTimeout(time, 1000); //設定定時器,循環運作
}
</script>
- header部分css樣式
header {
position: relative;
height: 1.25rem;
background: url(../images/head_bg.png) no-repeat top center;
background-size: 100% 100%;
h1 {
font-size: 0.475rem;
color: #fff;
text-align: center;
line-height: 1rem;
}
.showTime {
position: absolute;
top: 0;
right: 0.375rem;
line-height: 0.9375rem;
font-size: 0.25rem;
color: rgba(255, 255, 255, 0.7);
}
}
05-mainbox 主體子產品
- 需要一個上左右的10px 的内邊距
- column 列容器,分三列,占比 3:5:3
css樣式:
.mainbox {
padding: 0.125rem 0.125rem 0;
display: flex;
.column {
flex: 3;
}
&:nth-child(2) {
flex: 5;
}
}
06-公共面闆子產品 panel
- 高度為 310px
- 1像素的 1px solid rgba(25, 186, 139, 0.17) 邊框
- 有line.jpg 背景圖檔
- padding為 上為 0 左右 15px 下為 40px
- 下外邊距是 15px
- 利用panel 盒子 before 和after 制作上面兩個角 大小為 10px 線條為 2px solid #02a6b5
- 新加一個盒子before 和after 制作下側兩個角 寬度高度為 10px
.panel {
position: relative;
height: 3.875rem;
border: 1px solid rgba(25, 186, 139, 0.17);
background: url(../images/line\(1\).png);
padding: 0 0.1875rem 0.5rem;
margin-bottom: 0.1875rem;
&::before {
position: absolute;
top: 0;
left: 0;
content: "";
width: 10px;
height: 10px;
border-top: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
}
&::after {
position: absolute;
top: 0;
right: 0;
content: "";
width: 10px;
height: 10px;
border-top: 2px solid #02a6b5;
border-right: 2px solid #02a6b5;
}
.panel-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
&::before {
position: absolute;
bottom: 0;
left: 0;
content: "";
width: 10px;
height: 10px;
border-bottom: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
}
&::after {
position: absolute;
bottom: 0;
right: 0;
content: "";
width: 10px;
height: 10px;
border-bottom: 2px solid #02a6b5;
border-right: 2px solid #02a6b5;
}
}
}
07-柱形圖 bar 子產品(布局)
- 标題子產品 h2 高度為 48px 文字顔色為白色 文字大小為 20px
- 圖示内容子產品 chart 高度 240px
- 以上可以作為panel公共樣式部分
h2 {
height: 0.6rem;
line-height: 0.6rem;
text-align: center;
color: #fff;
font-size: 20px;
font-weight: 400;
}
.chart {
height: 3rem;
background-color: pink;
}
08-中間布局
- 上面是no 數字子產品
- 下面是map 地圖子產品
- 數字子產品 no 有個背景顔色 rgba(101, 132, 226, 0.1); 有個15像素的内邊距
- 注意中間列 column 有個 左右 10px 下 15px 的外邊距
- no 子產品裡面上下劃分 上面是數字(no-hd) 下面 是 相關文字說明(no-bd)
- no-hd 數字子產品 有一個邊框 1px solid rgba(25, 186, 139, 0.17)
- no-hd 數字子產品 裡面分為兩個小li 每個小li高度為 80px 文字大小為 70px 顔色為 #ffeb7b 字型是圖示字型 electronicFont
- no-hd 利用 after 和 before制作2個小角, 邊框 2px solid #02a6b5 寬度為 30px 高度為 10px
- 小豎線 給 第一個小li after 就可以 1px寬 背景顔色為 rgba(255, 255, 255, 0.2); 高度 50% top 25% 即可
- no-bd 裡面也有兩個小li 高度為 40px 文字顔色為 rgba(255, 255, 255, 0.7) 文字大小為 18px 上内邊距為 10px
/* 聲明字型*/
@font-face {
font-family: electronicFont;
src: url(../font/DS-DIGIT.TTF);
}
地圖子產品制作:
- 地圖子產品高度為 810px 裡面包含4個盒子 chart 放圖表子產品 球體盒子 旋轉1 旋轉2
- 球體圖檔子產品 map1 大小為 518px 要加背景圖檔 因為要縮放100% 定位到最中央 透明度 .3
- 旋轉1 map 2 大小為 643px 要加背景圖檔 因為要縮放100% 定位到中央 透明度 .6 做旋轉動畫 利用z-index壓住球體
- 旋轉2 map3 大小為 566px 要加背景圖檔 因為要縮放100% 定位到中央 旋轉動畫 注意是逆時針
<div class="no">
<div class="no-hd">
<ul>
<li>125811</li>
<li>104563</li>
</ul>
</div>
<div class="no-bd">
<ul>
<li>前端需求人數</li>
<li>市場供應人數</li>
</ul>
</div>
</div>
<div class="map">
<div class="chart"></div>
<div class="map1"></div>
<div class="map2"></div>
<div class="map3"></div>
</div>
中間樣式
/* 聲明字型*/
@font-face {
font-family: electronicFont;
src: url(../font/DS-DIGIT.TTF);
}
.no {
background: rgba(101, 132, 226, 0.1);
padding: 0.1875rem;
.no-hd {
position: relative;
border: 1px solid rgba(25, 186, 139, 0.17);
&::before {
content: "";
position: absolute;
width: 30px;
height: 10px;
border-top: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
top: 0;
left: 0;
}
&::after {
content: "";
position: absolute;
width: 30px;
height: 10px;
border-bottom: 2px solid #02a6b5;
border-right: 2px solid #02a6b5;
right: 0;
bottom: 0;
}
ul {
display: flex;
li {
position: relative;
flex: 1;
text-align: center;
height: 1rem;
line-height: 1rem;
font-size: 0.875rem;
color: #ffeb7b;
padding: 0.05rem 0;
font-family: electronicFont;
font-weight: bold;
&:first-child::after {
content: "";
position: absolute;
height: 50%;
width: 1px;
background: rgba(255, 255, 255, 0.2);
right: 0;
top: 25%;
}
}
}
}
.no-bd ul {
display: flex;
li {
flex: 1;
height: 0.5rem;
line-height: 0.5rem;
text-align: center;
font-size: 0.225rem;
color: rgba(255, 255, 255, 0.7);
padding-top: 0.125rem;
}
}
}
.map {
position: relative;
height: 10.125rem;
.chart {
position: absolute;
top: 0;
left: 0;
z-index: 5;
height: 10.125rem;
width: 100%;
}
.map1,
.map2,
.map3 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 6.475rem;
height: 6.475rem;
background: url(../images/map.png) no-repeat;
background-size: 100% 100%;
opacity: 0.3;
}
.map2 {
width: 8.0375rem;
height: 8.0375rem;
background-image: url(../images/lbx.png);
opacity: 0.6;
animation: rotate 15s linear infinite;
z-index: 2;
}
.map3 {
width: 7.075rem;
height: 7.075rem;
background-image: url(../images/jt.png);
animation: rotate1 10s linear infinite;
}
@keyframes rotate {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@keyframes rotate1 {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(-360deg);
}
}
}
09-Echarts-介紹
常見的資料可視化庫:
- D3.js 目前 Web 端評價最高的 Javascript 可視化工具庫(入手難)
- ECharts.js 百度出品的一個開源 Javascript 資料可視化庫
- Highcharts.js 國外的前端資料可視化庫,非商用免費,被許多國外大公司所使用
- AntV 螞蟻金服全新一代資料可視化解決方案 等等
- Highcharts 和 Echarts 就像是 Office 和 WPS 的關系
ECharts,一個使用 JavaScript 實作的開源可視化庫,可以流暢的運作在 PC 和移動裝置上,相容目前絕大部分浏覽器(IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴矢量圖形庫 ZRender,提供直覺,互動豐富,可高度個性化定制的資料可視化圖表。
大白話:
- 是一個JS插件
- 性能好可流暢運作PC與移動裝置
- 相容主流浏覽器
- 提供很多常用圖表,且可定制。
- 折線圖、柱狀圖、散點圖、餅圖、K線圖
官網位址:https://www.echartsjs.com/zh/index.html
10-Echarts-體驗
官方教程:[五分鐘上手ECharts](https://www.echartsjs.com/zh/tutorial.html#5 分鐘上手 ECharts)
- 下載下傳echarts https://github.com/apache/incubator-echarts/tree/4.5.0
使用步驟:
- 引入echarts 插件檔案到html頁面中
- 準備一個具備大小的DOM容器
- 初始化echarts執行個體對象
- 指定配置項和資料(option)
var option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [{
data: [820, 932, 901, 934, 1290, 1330, 1320],
type: 'line'
}]
};
- 将配置項設定給echarts執行個體對象
11-Echarts-基礎配置
這是要求同學們知道以下配置每個子產品的主要作用幹什麼的就可以了
需要了解的主要配置:
series
xAxis
yAxis
grid
tooltip
title
legend
color
- series
- 系列清單。每個系列通過
決定自己的圖表類型type
- 大白話:圖示資料,指定什麼類型的圖示,可以多個圖表重疊。
- 系列清單。每個系列通過
- xAxis:直角坐标系 grid 中的 x 軸
- boundaryGap: 坐标軸兩邊留白政策 true,這時候刻度隻是作為分隔線,标簽和資料點都會在兩個刻度之間的帶(band)中間。
- yAxis:直角坐标系 grid 中的 y 軸
- grid:直角坐标系内繪圖網格。
- title:标題元件
- tooltip:提示框元件
- legend:圖例元件
-
color:調色盤顔色清單
資料堆疊,同個類目軸上系列配置相同的
值後 後一個系列的值會在前一個系列的值上相加。stack
option = {
// color設定我們線條的顔色 注意後面是個數組
color: ['pink', 'red', 'green', 'skyblue'],
// 設定圖表的标題
title: {
text: '折線圖堆疊123'
},
// 圖表的提示框元件
tooltip: {
// 觸發方式
trigger: 'axis'
},
// 圖例元件
legend: {
// series裡面有了 name值則 legend裡面的data可以删掉
},
// 網格配置 grid可以控制線形圖 柱狀圖 圖表大小
grid: {
left: '3%',
right: '4%',
bottom: '3%',
// 是否顯示刻度标簽 如果是true 就顯示 否則反之
containLabel: true
},
// 工具箱元件 可以另存為圖檔等功能
toolbox: {
feature: {
saveAsImage: {}
}
},
// 設定x軸的相關配置
xAxis: {
type: 'category',
// 是否讓我們的線條和坐标軸有縫隙
boundaryGap: false,
data: ['星期一', '周二', '周三', '周四', '周五', '周六', '周日']
},
// 設定y軸的相關配置
yAxis: {
type: 'value'
},
// 系列圖表配置 它決定着顯示那種類型的圖表
series: [
{
name: '郵件營銷',
type: 'line',
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '聯盟廣告',
type: 'line',
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: '視訊廣告',
type: 'line',
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: '直接通路',
type: 'line',
data: [320, 332, 301, 334, 390, 330, 320]
}
]
};
12- 柱狀圖圖表(兩大步驟)
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
- 引入到html頁面中
// 柱狀圖1子產品
(function() {
// 執行個體化對象
let myChart = echarts.init(document.querySelector(".bar .chart"));
// 指定配置和資料
let option = {
color: ["#3398DB"],
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标軸訓示器,坐标軸觸發有效
type: "shadow" // 預設為直線,可選為:'line' | 'shadow'
}
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
xAxis: [
{
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: "value"
}
],
series: [
{
name: "直接通路",
type: "bar",
barWidth: "60%",
data: [10, 52, 200, 334, 390, 330, 220]
}
]
};
// 把配置給執行個體對象
myChart.setOption(option);
})();
- 根據需求定制
- 修改圖表柱形顔色 #2f89cf
- 修改圖表大小 top 為 10px bottom 為 4% grid決定我們的柱狀圖的大小
color: ["#2f89cf"], grid: { left: "0%", top: "10px", right: "0%", bottom: "4%", containLabel: true },
- X軸相關設定 xAxis
- 文本顔色設定為 rgba(255,255,255,.6) 字型大小為 12px
- X軸線的樣式 不顯示
// 設定x軸标簽文字樣式
// x軸的文字顔色和大小
axisLabel: {
color: “rgba(255,255,255,.6)”,
fontSize: “12”
},
// x軸樣式不顯示
axisLine: {
show: false
// 如果想要設定單獨的線條樣式
// lineStyle: {
// color: “rgba(255,255,255,.1)”,
// width: 1,
// type: “solid”
}
}
- Y 軸相關定制
- 文本顔色設定為 rgba(255,255,255,.6) 字型大小為 12px
- Y 軸線條樣式 更改為 1像素的 rgba(255,255,255,.1) 邊框
- 分隔線的顔色修飾為 1像素的 rgba(255,255,255,.1)
~~~JavaScript
// y 軸文字标簽樣式
axisLabel: {
color: "rgba(255,255,255,.6)",
fontSize: "12"
},
// y軸線條樣式
axisLine: {
lineStyle: {
color: "rgba(255,255,255,.1)",
// width: 1,
// type: "solid"
}
5232},
// y 軸分隔線樣式
splitLine: {
lineStyle: {
color: "rgba(255,255,255,.1)"
}
}
- 修改柱形為圓角以及柱子寬度 series 裡面設定
series: [
{
name: "直接通路",
type: "bar",
// 修改柱子寬度
barWidth: "35%",
data: [10, 52, 200, 334, 390, 330, 220],
itemStyle: {
// 修改柱子圓角
barBorderRadius: 5
}
}
]
};
- 更換對應資料
// x軸中更換data資料
data: [ "旅遊行業","教育教育訓練", "遊戲行業", "醫療行業", "電商行業", "社交行業", "金融行業" ],
// series 更換資料
data: [200, 300, 300, 900, 1500, 1200, 600]
- 讓圖表跟随螢幕自适應
window.addEventListener("resize", function() {
myChart.resize();
});
13-柱狀圖2定制
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 修改圖形大小 grid
// 圖示位置
grid: {
top: "10%",
left: "22%",
bottom: "10%"
},
需求2: 不顯示x軸
xAxis: {
show: false
},
需求3: y軸相關定制
- 不顯示y軸線和相關刻度
//不顯示y軸線條
axisLine: {
show: false
},
// 不顯示刻度
axisTick: {
show: false
},
- y軸文字的顔色設定為白色
axisLabel: {
color: "#fff"
},
需求4: 修改第一組柱子相關樣式(條狀)
name: "條",
// 柱子之間的距離
barCategoryGap: 50,
//柱子的寬度
barWidth: 10,
// 柱子設為圓角
itemStyle: {
normal: {
barBorderRadius: 20,
}
},
- 設定第一組柱子内百分比顯示資料
// 圖形上的文本标簽
label: {
normal: {
show: true,
// 圖形内顯示
position: "inside",
// 文字的顯示格式
formatter: "{c}%"
}
},
- 設定第一組柱子不同顔色
// 聲明顔色數組
var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];
// 2. 給 itemStyle 裡面的color 屬性設定一個 傳回值函數
itemStyle: {
normal: {
barBorderRadius: 20,
// params 傳進來的是柱子對象
console.log(params);
// dataIndex 是目前柱子的索引号
return myColor[params.dataIndex];
}
},
需求5: 修改第二組柱子的相關配置(框狀)
name: "框",
type: "bar",
barCategoryGap: 50,
barWidth: 15,
itemStyle: {
color: "none",
borderColor: "#00c1de",
borderWidth: 3,
barBorderRadius: 15
},
data: [19325, 23438, 31000, 121594, 134141, 681807]
}
需求6: 給y軸添加第二組資料
yAxis: [
{
type: "category",
data: ["印尼", "美國", "印度", "中國", "世界人口(萬)"],
// 不顯示y軸的線
axisLine: {
show: false
},
// 不顯示刻度
axisTick: {
show: false
},
// 把刻度标簽裡面的文字顔色設定為白色
axisLabel: {
color: "#fff"
}
},
{
show: true,
data: [702, 350, 610, 793, 664],
// 不顯示y軸的線
axisLine: {
show: false
},
// 不顯示刻度
axisTick: {
show: false
},
axisLabel: {
textStyle: {
fontSize: 12,
color: "#fff"
}
}
}
],
需求7: 設定兩組柱子層疊以及更換資料
// 給series 第一個對象裡面的 添加
yAxisIndex: 0,
// 給series 第二個對象裡面的 添加
yAxisIndex: 1,
// series 第一個對象裡面的data
data: [70, 34, 60, 78, 69],
// series 第二個對象裡面的data
data: [100, 100, 100, 100, 100],
// y軸更換第一個對象更換data資料
data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"],
// y軸更換第二個對象更換data資料
data:[702, 350, 610, 793, 664],
完整代碼:
// 柱狀圖2
(function() {
var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];
// 1. 執行個體化對象
var myChart = echarts.init(document.querySelector(".bar2 .chart"));
// 2. 指定配置和資料
var option = {
grid: {
top: "10%",
left: "22%",
bottom: "10%"
// containLabel: true
},
// 不顯示x軸的相關資訊
xAxis: {
show: false
},
yAxis: [
{
type: "category",
inverse: true,
data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"],
// 不顯示y軸的線
axisLine: {
show: false
},
// 不顯示刻度
axisTick: {
show: false
},
// 把刻度标簽裡面的文字顔色設定為白色
axisLabel: {
color: "#fff"
}
},
{
data: [702, 350, 610, 793, 664],
inverse: true,
// 不顯示y軸的線
axisLine: {
show: false
},
// 不顯示刻度
axisTick: {
show: false
},
// 把刻度标簽裡面的文字顔色設定為白色
axisLabel: {
color: "#fff"
}
}
],
series: [
{
name: "條",
type: "bar",
data: [70, 34, 60, 78, 69],
yAxisIndex: 0,
// 修改第一組柱子的圓角
itemStyle: {
barBorderRadius: 20,
// 此時的color 可以修改柱子的顔色
color: function(params) {
// params 傳進來的是柱子對象
console.log(params);
// dataIndex 是目前柱子的索引号
return myColor[params.dataIndex];
}
},
// 柱子之間的距離
barCategoryGap: 50,
//柱子的寬度
barWidth: 10,
// 顯示柱子内的文字
label: {
show: true,
position: "inside",
// {c} 會自動的解析為 資料 data裡面的資料
formatter: "{c}%"
}
},
{
name: "框",
type: "bar",
barCategoryGap: 50,
barWidth: 15,
yAxisIndex: 1,
data: [100, 100, 100, 100, 100],
itemStyle: {
color: "none",
borderColor: "#00c1de",
borderWidth: 3,
barBorderRadius: 15
}
}
]
};
// 3. 把配置給執行個體對象
myChart.setOption(option);
})();
14-折線圖1 人員變化子產品制作
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 修改折線圖大小,顯示邊框設定顔色:#012f4a,并且顯示刻度标簽。
// 設定網格樣式
grid: {
top: '20%',
left: '3%',
right: '4%',
bottom: '3%',
show: true,// 顯示邊框
borderColor: '#012f4a',// 邊框顔色
containLabel: true // 包含刻度文字在内
},
需求2: 修改圖例元件中的文字顔色 #4c9bfd, 距離右側 right 為 10%
// 圖例元件
legend: {
textStyle: {
color: '#4c9bfd' // 圖例文字顔色
},
right: '10%' // 距離右邊10%
},
需求3: x軸相關配置
- 刻度去除
- x軸刻度标簽字型顔色:#4c9bfd
- 剔除x坐标軸線顔色(将來使用Y軸分割線)
- 軸兩端是不需要内間距 boundaryGap
xAxis: {
type: 'category',
data: ["周一", "周二"],
axisTick: {
show: false // 去除刻度線
},
axisLabel: {
color: '#4c9bfd' // 文本顔色
},
axisLine: {
show: false // 去除軸線
},
boundaryGap: false // 去除軸内間距
},
需求4: y軸的定制
- 刻度去除
- 字型顔色:#4c9bfd
- 分割線顔色:#012f4a
yAxis: {
type: 'value',
axisTick: {
show: false // 去除刻度
},
axisLabel: {
color: '#4c9bfd' // 文字顔色
},
splitLine: {
lineStyle: {
color: '#012f4a' // 分割線顔色
}
}
},
需求5: 兩條線形圖定制
- 顔色分别:#00f2f1 #ed3f35
- 把折線修飾為圓滑 series 資料中添加 smooth 為 true
color: ['#00f2f1', '#ed3f35'],
series: [{
name:'新增粉絲',
data: [820, 932, 901, 934, 1290, 1330, 1320],
type: 'line',
// 折線修飾為圓滑
smooth: true,
},{
name:'新增遊客',
data: [100, 331, 200, 123, 233, 543, 400],
type: 'line',
smooth: true,
}]
需求6: 配置資料
// x軸的文字
xAxis: {
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
// 圖示資料
series: [{
name:'新增粉絲',
data: [24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],
type: 'line',
smooth: true
},{
name:'新增遊客',
data: [40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79],
type: 'line',
smooth: true
}
}]
需求7: 新增需求 點選 2020年 2021年 資料發生變化
以下是背景送過來資料(ajax請求過來的)
var yearData = [
{
year: '2020', // 年份
data: [ // 兩個數組是因為有兩條線
[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],
[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]
]
},
{
year: '2021', // 年份
data: [ // 兩個數組是因為有兩條線
[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],
[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]
]
}
];
- tab欄切換事件
- 點選2020按鈕 需要把 series 第一個對象裡面的data 換成 2020年對象裡面data[0]
- 點選2020按鈕 需要把 series 第二個對象裡面的data 換成 2020年對象裡面data[1]
- 2021 按鈕同樣道理
完整代碼:
// 折線圖1子產品制作
(function() {
var yearData = [
{
year: "2020", // 年份
data: [
// 兩個數組是因為有兩條線
[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],
[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]
]
},
{
year: "2021", // 年份
data: [
// 兩個數組是因為有兩條線
[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],
[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]
]
}
];
// 1. 執行個體化對象
var myChart = echarts.init(document.querySelector(".line .chart"));
// 2.指定配置
var option = {
// 通過這個color修改兩條線的顔色
color: ["#00f2f1", "#ed3f35"],
tooltip: {
trigger: "axis"
},
legend: {
// 如果series 對象有name 值,則 legend可以不用寫data
// 修改圖例元件 文字顔色
textStyle: {
color: "#4c9bfd"
},
// 這個10% 必須加引号
right: "10%"
},
grid: {
top: "20%",
left: "3%",
right: "4%",
bottom: "3%",
show: true, // 顯示邊框
borderColor: "#012f4a", // 邊框顔色
containLabel: true // 包含刻度文字在内
},
xAxis: {
type: "category",
boundaryGap: false,
data: [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
axisTick: {
show: false // 去除刻度線
},
axisLabel: {
color: "#4c9bfd" // 文本顔色
},
axisLine: {
show: false // 去除軸線
}
},
yAxis: {
type: "value",
axisTick: {
show: false // 去除刻度線
},
axisLabel: {
color: "#4c9bfd" // 文本顔色
},
axisLine: {
show: false // 去除軸線
},
splitLine: {
lineStyle: {
color: "#012f4a" // 分割線顔色
}
}
},
series: [
{
name: "新增粉絲",
type: "line",
// true 可以讓我們的折線顯示帶有弧度
smooth: true,
data: yearData[0].data[0]
},
{
name: "新增遊客",
type: "line",
smooth: true,
data: yearData[0].data[1]
}
]
};
// 3. 把配置給執行個體對象
myChart.setOption(option);
// 4. 讓圖表跟随螢幕自動的去适應
window.addEventListener("resize", function() {
myChart.resize();
});
// 5.點選切換效果
$(".line h2").on("click", "a", function() {
// alert(1);
// console.log($(this).index());
// 點選 a 之後 根據目前a的索引号 找到對應的 yearData的相關對象
// console.log(yearData[$(this).index()]);
var obj = yearData[$(this).index()];
option.series[0].data = obj.data[0];
option.series[1].data = obj.data[1];
// 需要重新渲染
myChart.setOption(option);
});
})();
15-折線圖2 播放量子產品制作
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
需求1: 更換圖例元件文字顔色 rgba(255,255,255,.5) 文字大小為12
legend: {
top: "0%",
textStyle: {
color: "rgba(255,255,255,.5)",
fontSize: "12"
}
},
需求2: 修改圖表大小
grid: {
left: "10",
top: "30",
right: "10",
bottom: "10",
containLabel: true
},
需求3: 修改x軸相關配置
- 修改文本顔色為rgba(255,255,255,.6) 文字大小為 12
- x軸線的顔色為 rgba(255,255,255,.2)
// 文本顔色為rgba(255,255,255,.6) 文字大小為 12
axisLabel: {
textStyle: {
color: "rgba(255,255,255,.6)",
fontSize: 12
}
},
// x軸線的顔色為 rgba(255,255,255,.2)
axisLine: {
lineStyle: {
color: "rgba(255,255,255,.2)"
}
},
需求4: 修改y軸的相關配置
axisTick: { show: false },
axisLine: {
lineStyle: {
color: "rgba(255,255,255,.1)"
}
},
axisLabel: {
textStyle: {
color: "rgba(255,255,255,.6)",
fontSize: 12
}
},
// 修改分割線的顔色
splitLine: {
lineStyle: {
color: "rgba(255,255,255,.1)"
}
}
需求5: 修改兩個線子產品配置(注意在series 裡面定制)
//第一條 線是圓滑
smooth: true,
// 單獨修改線的樣式
lineStyle: {
color: "#0184d5",
width: 2
},
// 填充區域
areaStyle: {
// 漸變色,隻需要複制即可
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "rgba(1, 132, 213, 0.4)" // 漸變色的起始顔色
},
{
offset: 0.8,
color: "rgba(1, 132, 213, 0.1)" // 漸變線的結束顔色
}
],
false
),
shadowColor: "rgba(0, 0, 0, 0.1)"
},
// 設定拐點 小圓點
symbol: "circle",
// 拐點大小
symbolSize: 8,
// 設定拐點顔色以及邊框
itemStyle: {
color: "#0184d5",
borderColor: "rgba(221, 220, 107, .1)",
borderWidth: 12
},
// 開始不顯示拐點, 滑鼠經過顯示
showSymbol: false,
name: "轉發量",
type: "line",
smooth: true,
lineStyle: {
normal: {
color: "#00d887",
width: 2
}
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "rgba(0, 216, 135, 0.4)"
},
{
offset: 0.8,
color: "rgba(0, 216, 135, 0.1)"
}
],
false
),
shadowColor: "rgba(0, 0, 0, 0.1)"
}
},
// 設定拐點 小圓點
symbol: "circle",
// 拐點大小
symbolSize: 5,
// 設定拐點顔色以及邊框
itemStyle: {
color: "#00d887",
borderColor: "rgba(221, 220, 107, .1)",
borderWidth: 12
},
// 開始不顯示拐點, 滑鼠經過顯示
showSymbol: false,
需求6: 更換資料
// x軸更換資料
data: [ "01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","26","28","29","30"],
// series 第一個對象data資料
data: [ 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 20,60,50, 40],
// series 第二個對象data資料
data: [ 130, 10, 20, 40,30, 40, 80,60,20, 40, 90, 40,20, 140,30, 40, 130,20,20, 40, 80, 70, 30, 40,30, 120, 20,99,50, 20],
16-餅形圖 1年齡分布子產品制作
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
定制圖表需求1:
- 修改圖例元件在底部并且居中顯示。
- 每個小圖示的寬度和高度修改為 10px
- 文字大小為12 顔色 rgba(255,255,255,.5)
legend: {
// 距離底部為0%
bottom: "0%",
// 小圖示的寬度和高度
itemWidth: 10,
itemHeight: 10,
data: ['直接通路', '郵件營銷', '聯盟廣告', '視訊廣告', '搜尋引擎'],
// 修改圖例元件的文字為 12px
textStyle: {
color: "rgba(255,255,255,.5)",
fontSize: "12"
}
},
定制需求2:
- 修改水準居中 垂直居中
- 修改内圓半徑和外圓半徑為 [“40%”, “60%”] pink老師友情提示,帶有直角坐标系的比如折線圖柱狀圖是 grid修改圖形大小,而我們餅形圖是通過 radius 修改大小
series: [
{
name: "年齡分布",
type: "pie",
// 設定餅形圖在容器中的位置
center: ["50%", "50%"],
// 修改内圓半徑和外圓半徑為 百分比是相對于容器寬度來說的
radius: ["40%", "60%"],
// 不顯示标簽文字
label: { show: false },
// 不顯示連接配接線
labelLine: { show: false },
}
]
定制需求3:更換資料
// legend 中的data 可省略
data: ["0歲以下", "20-29歲", "30-39歲", "40-49歲", "50歲以上"],
// series 中的資料
data: [
{ value: 1, name: "0歲以下" },
{ value: 4, name: "20-29歲" },
{ value: 2, name: "30-39歲" },
{ value: 2, name: "40-49歲" },
{ value: 1, name: "50歲以上" }
] ,
定制需求4: 更換顔色
color: [
"#065aab",
"#066eab",
"#0682ab",
"#0696ab",
"#06a0ab",
],
// 4. 讓圖表跟随螢幕自動的去适應
window.addEventListener("resize", function() {
myChart.resize();
});
17-餅形圖2 地區分布子產品制作(南丁格爾玫瑰圖)
- 官網找到類似執行個體, 适當分析,并且引入到HTML頁面中
- 根據需求定制圖表
第二步:按照需求定制
- 需求1:顔色設定
- 需求2:修改餅形圖大小 ( series對象)
- 需求3: 把餅形圖的顯示模式改為 半徑模式
- 需求4:資料使用更換(series對象 裡面 data對象)
{ value: 20, name: '雲南' },
{ value: 26, name: '北京' },
{ value: 24, name: '山東' },
{ value: 25, name: '河北' },
{ value: 20, name: '江蘇' },
{ value: 25, name: '浙江' },
{ value: 30, name: '四川' },
{ value: 42, name: '湖北' }
-
需求5:字型略小些 10 px ( series對象裡面設定 )
餅圖圖形上的文本标簽可以控制餅形圖的文字的一些樣式。 label 對象設定
series: [
{
name: "面積模式",
type: "pie",
radius: [30, 110],
center: ["50%", "50%"],
roseType: "radius",
// 文本标簽控制餅形圖文字的相關樣式, 注意它是一個對象
label: {
fontSize: 10
},
}
]
};
- 需求6:防止縮放的時候,引導線過長。引導線略短些 (series對象裡面的 labelLine 對象設定 )
- 連接配接圖表 6 px
- 連接配接文字 8 px
+ // 文字調整
+ label:{
+ fontSize: 10
+ },
+ // 引導線調整
+ labelLine: {
+ // 連接配接扇形圖線長
+ length: 6,
+ // 連接配接文字線長
+ length2: 8
+ }
+ }
+ ],
- 需求6:浏覽器縮放的時候,圖表跟着自動适配。
// 監聽浏覽器縮放,圖表對象調用縮放resize函數
window.addEventListener("resize", function() {
myChart.resize();
});
18-Echarts-社群介紹
社群就是一些,活躍的echart使用者,交流和貢獻定制好的圖表的地方。
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-yQ8LYedJ-1614084852424)(docs/media/1576664444951.png)]
- 在這裡可以找到一些基于echart的高度定制好的圖表,相當于基于jquery開發的插件,這裡是基于echarts開發的第三方的圖表。
19-Echarts-map使用(擴充)
參考社群的例子:https://gallery.echartsjs.com/editor.html?c=x0-ExSkZDM (模拟飛機航線)
實作步驟:
- 第一需要下載下傳china.js提供中國地圖的js檔案
- 第二個因為裡面代碼比較多,我們建立一個新的js檔案 myMap.js 引入
- 使用社群提供的配置即可。
需要修改:
- 去掉标題元件
- 去掉背景顔色
- 修改地圖省份背景 #142957 areaColor 裡面做修改
- 地圖放大通過 zoom 設定為1.2即可
geo: {
map: 'china',
zoom: 1.2,
label: {
emphasis: {
show: false
}
},
roam: false,
itemStyle: {
normal: {
areaColor: '#142957',
borderColor: '#0692a4'
},
emphasis: {
areaColor: '#0b1c2d'
}
}
},
總結:這例子是擴充案例,大家以後可以多看看社群裡面的案例。
20- 最後限制縮放
/* 限制螢幕尺寸 */
@media screen and (max-width: 1024px) {
html {
font-size: 42px !important;
}
}
@media screen and (min-width: 1920px) {
html {
font-size: 80px !important;
}
}