refactor(experiment_5):重构实验 5 数据格式和图表展示
- 移除 iris.csv 和 marketing.sql 文件 - 新增 sales_manager.csv 和 sales_month.csv 文件 - 添加 sales_manager.js 文件,实现销售数据的图表展示
This commit is contained in:
@@ -1,151 +0,0 @@
|
|||||||
Id,PetalLength,PetalWidth,SepalLength,SepalWidth,Species
|
|
||||||
1,5.1,3.5,1.4,0.2,setosa
|
|
||||||
2,4.9,3,1.4,0.2,setosa
|
|
||||||
3,4.7,3.2,1.3,0.2,setosa
|
|
||||||
4,4.6,3.1,1.5,0.2,setosa
|
|
||||||
5,5,3.6,1.4,0.2,setosa
|
|
||||||
6,5.4,3.9,1.7,0.4,setosa
|
|
||||||
7,4.6,3.4,1.4,0.3,setosa
|
|
||||||
8,5,3.4,1.5,0.2,setosa
|
|
||||||
9,4.4,2.9,1.4,0.2,setosa
|
|
||||||
10,4.9,3.1,1.5,0.1,setosa
|
|
||||||
11,5.4,3.7,1.5,0.2,setosa
|
|
||||||
12,4.8,3.4,1.6,0.2,setosa
|
|
||||||
13,4.8,3,1.4,0.1,setosa
|
|
||||||
14,4.3,3,1.1,0.1,setosa
|
|
||||||
15,5.8,4,1.2,0.2,setosa
|
|
||||||
16,5.7,4.4,1.5,0.4,setosa
|
|
||||||
17,5.4,3.9,1.3,0.4,setosa
|
|
||||||
18,5.1,3.5,1.4,0.3,setosa
|
|
||||||
19,5.7,3.8,1.7,0.3,setosa
|
|
||||||
20,5.1,3.8,1.5,0.3,setosa
|
|
||||||
21,5.4,3.4,1.7,0.2,setosa
|
|
||||||
22,5.1,3.7,1.5,0.4,setosa
|
|
||||||
23,4.6,3.6,1,0.2,setosa
|
|
||||||
24,5.1,3.3,1.7,0.5,setosa
|
|
||||||
25,4.8,3.4,1.9,0.2,setosa
|
|
||||||
26,5,3,1.6,0.2,setosa
|
|
||||||
27,5,3.4,1.6,0.4,setosa
|
|
||||||
28,5.2,3.5,1.5,0.2,setosa
|
|
||||||
29,5.2,3.4,1.4,0.2,setosa
|
|
||||||
30,4.7,3.2,1.6,0.2,setosa
|
|
||||||
31,4.8,3.1,1.6,0.2,setosa
|
|
||||||
32,5.4,3.4,1.5,0.4,setosa
|
|
||||||
33,5.2,4.1,1.5,0.1,setosa
|
|
||||||
34,5.5,4.2,1.4,0.2,setosa
|
|
||||||
35,4.9,3.1,1.5,0.2,setosa
|
|
||||||
36,5,3.2,1.2,0.2,setosa
|
|
||||||
37,5.5,3.5,1.3,0.2,setosa
|
|
||||||
38,4.9,3.6,1.4,0.1,setosa
|
|
||||||
39,4.4,3,1.3,0.2,setosa
|
|
||||||
40,5.1,3.4,1.5,0.2,setosa
|
|
||||||
41,5,3.5,1.3,0.3,setosa
|
|
||||||
42,4.5,2.3,1.3,0.3,setosa
|
|
||||||
43,4.4,3.2,1.3,0.2,setosa
|
|
||||||
44,5,3.5,1.6,0.6,setosa
|
|
||||||
45,5.1,3.8,1.9,0.4,setosa
|
|
||||||
46,4.8,3,1.4,0.3,setosa
|
|
||||||
47,5.1,3.8,1.6,0.2,setosa
|
|
||||||
48,4.6,3.2,1.4,0.2,setosa
|
|
||||||
49,5.3,3.7,1.5,0.2,setosa
|
|
||||||
50,5,3.3,1.4,0.2,setosa
|
|
||||||
51,7,3.2,4.7,1.4,versicolor
|
|
||||||
52,6.4,3.2,4.5,1.5,versicolor
|
|
||||||
53,6.9,3.1,4.9,1.5,versicolor
|
|
||||||
54,5.5,2.3,4,1.3,versicolor
|
|
||||||
55,6.5,2.8,4.6,1.5,versicolor
|
|
||||||
56,5.7,2.8,4.5,1.3,versicolor
|
|
||||||
57,6.3,3.3,4.7,1.6,versicolor
|
|
||||||
58,4.9,2.4,3.3,1,versicolor
|
|
||||||
59,6.6,2.9,4.6,1.3,versicolor
|
|
||||||
60,5.2,2.7,3.9,1.4,versicolor
|
|
||||||
61,5,2,3.5,1,versicolor
|
|
||||||
62,5.9,3,4.2,1.5,versicolor
|
|
||||||
63,6,2.2,4,1,versicolor
|
|
||||||
64,6.1,2.9,4.7,1.4,versicolor
|
|
||||||
65,5.6,2.9,3.6,1.3,versicolor
|
|
||||||
66,6.7,3.1,4.4,1.4,versicolor
|
|
||||||
67,5.6,3,4.5,1.5,versicolor
|
|
||||||
68,5.8,2.7,4.1,1,versicolor
|
|
||||||
69,6.2,2.2,4.5,1.5,versicolor
|
|
||||||
70,5.6,2.5,3.9,1.1,versicolor
|
|
||||||
71,5.9,3.2,4.8,1.8,versicolor
|
|
||||||
72,6.1,2.8,4,1.3,versicolor
|
|
||||||
73,6.3,2.5,4.9,1.5,versicolor
|
|
||||||
74,6.1,2.8,4.7,1.2,versicolor
|
|
||||||
75,6.4,2.9,4.3,1.3,versicolor
|
|
||||||
76,6.6,3,4.4,1.4,versicolor
|
|
||||||
77,6.8,2.8,4.8,1.4,versicolor
|
|
||||||
78,6.7,3,5,1.7,versicolor
|
|
||||||
79,6,2.9,4.5,1.5,versicolor
|
|
||||||
80,5.7,2.6,3.5,1,versicolor
|
|
||||||
81,5.5,2.4,3.8,1.1,versicolor
|
|
||||||
82,5.5,2.4,3.7,1,versicolor
|
|
||||||
83,5.8,2.7,3.9,1.2,versicolor
|
|
||||||
84,6,2.7,5.1,1.6,versicolor
|
|
||||||
85,5.4,3,4.5,1.5,versicolor
|
|
||||||
86,6,3.4,4.5,1.6,versicolor
|
|
||||||
87,6.7,3.1,4.7,1.5,versicolor
|
|
||||||
88,6.3,2.3,4.4,1.3,versicolor
|
|
||||||
89,5.6,3,4.1,1.3,versicolor
|
|
||||||
90,5.5,2.5,4,1.3,versicolor
|
|
||||||
91,5.5,2.6,4.4,1.2,versicolor
|
|
||||||
92,6.1,3,4.6,1.4,versicolor
|
|
||||||
93,5.8,2.6,4,1.2,versicolor
|
|
||||||
94,5,2.3,3.3,1,versicolor
|
|
||||||
95,5.6,2.7,4.2,1.3,versicolor
|
|
||||||
96,5.7,3,4.2,1.2,versicolor
|
|
||||||
97,5.7,2.9,4.2,1.3,versicolor
|
|
||||||
98,6.2,2.9,4.3,1.3,versicolor
|
|
||||||
99,5.1,2.5,3,1.1,versicolor
|
|
||||||
100,5.7,2.8,4.1,1.3,versicolor
|
|
||||||
101,6.3,3.3,6,2.5,virginica
|
|
||||||
102,5.8,2.7,5.1,1.9,virginica
|
|
||||||
103,7.1,3,5.9,2.1,virginica
|
|
||||||
104,6.3,2.9,5.6,1.8,virginica
|
|
||||||
105,6.5,3,5.8,2.2,virginica
|
|
||||||
106,7.6,3,6.6,2.1,virginica
|
|
||||||
107,4.9,2.5,4.5,1.7,virginica
|
|
||||||
108,7.3,2.9,6.3,1.8,virginica
|
|
||||||
109,6.7,2.5,5.8,1.8,virginica
|
|
||||||
110,7.2,3.6,6.1,2.5,virginica
|
|
||||||
111,6.5,3.2,5.1,2,virginica
|
|
||||||
112,6.4,2.7,5.3,1.9,virginica
|
|
||||||
113,6.8,3,5.5,2.1,virginica
|
|
||||||
114,5.7,2.5,5,2,virginica
|
|
||||||
115,5.8,2.8,5.1,2.4,virginica
|
|
||||||
116,6.4,3.2,5.3,2.3,virginica
|
|
||||||
117,6.5,3,5.5,1.8,virginica
|
|
||||||
118,7.7,3.8,6.7,2.2,virginica
|
|
||||||
119,7.7,2.6,6.9,2.3,virginica
|
|
||||||
120,6,2.2,5,1.5,virginica
|
|
||||||
121,6.9,3.2,5.7,2.3,virginica
|
|
||||||
122,5.6,2.8,4.9,2,virginica
|
|
||||||
123,7.7,2.8,6.7,2,virginica
|
|
||||||
124,6.3,2.7,4.9,1.8,virginica
|
|
||||||
125,6.7,3.3,5.7,2.1,virginica
|
|
||||||
126,7.2,3.2,6,1.8,virginica
|
|
||||||
127,6.2,2.8,4.8,1.8,virginica
|
|
||||||
128,6.1,3,4.9,1.8,virginica
|
|
||||||
129,6.4,2.8,5.6,2.1,virginica
|
|
||||||
130,7.2,3,5.8,1.6,virginica
|
|
||||||
131,7.4,2.8,6.1,1.9,virginica
|
|
||||||
132,7.9,3.8,6.4,2,virginica
|
|
||||||
133,6.4,2.8,5.6,2.2,virginica
|
|
||||||
134,6.3,2.8,5.1,1.5,virginica
|
|
||||||
135,6.1,2.6,5.6,1.4,virginica
|
|
||||||
136,7.7,3,6.1,2.3,virginica
|
|
||||||
137,6.3,3.4,5.6,2.4,virginica
|
|
||||||
138,6.4,3.1,5.5,1.8,virginica
|
|
||||||
139,6,3,4.8,1.8,virginica
|
|
||||||
140,6.9,3.1,5.4,2.1,virginica
|
|
||||||
141,6.7,3.1,5.6,2.4,virginica
|
|
||||||
142,6.9,3.1,5.1,2.3,virginica
|
|
||||||
143,5.8,2.7,5.1,1.9,virginica
|
|
||||||
144,6.8,3.2,5.9,2.3,virginica
|
|
||||||
145,6.7,3.3,5.7,2.5,virginica
|
|
||||||
146,6.7,3,5.2,2.3,virginica
|
|
||||||
147,6.3,2.5,5,1.9,virginica
|
|
||||||
148,6.5,3,5.2,2,virginica
|
|
||||||
149,6.2,3.4,5.4,2.3,virginica
|
|
||||||
150,5.9,3,5.1,1.8,virginica
|
|
||||||
|
@@ -1,183 +0,0 @@
|
|||||||
/*
|
|
||||||
Navicat Premium Data Transfer
|
|
||||||
|
|
||||||
Source Server : localhost_3306
|
|
||||||
Source Server Type : MySQL
|
|
||||||
Source Server Version : 80020
|
|
||||||
Source Host : localhost:3306
|
|
||||||
Source Schema : marketing
|
|
||||||
|
|
||||||
Target Server Type : MySQL
|
|
||||||
Target Server Version : 80020
|
|
||||||
File Encoding : 65001
|
|
||||||
|
|
||||||
Date: 20/04/2025 00:05:44
|
|
||||||
*/
|
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for main_categories
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `main_categories`;
|
|
||||||
CREATE TABLE `main_categories` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
|
||||||
`value` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of main_categories
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `main_categories` VALUES (1, '办公用品', 949270.224);
|
|
||||||
INSERT INTO `main_categories` VALUES (2, '技术', 937985.552);
|
|
||||||
INSERT INTO `main_categories` VALUES (3, '家具', 1028418.503);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for sales_manager
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `sales_manager`;
|
|
||||||
CREATE TABLE `sales_manager` (
|
|
||||||
`sales_manager` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
|
||||||
`sales` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
`profit` decimal(10, 3) NULL DEFAULT NULL
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of sales_manager
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `sales_manager` VALUES ('郝杰', 502667.277, 55300.637);
|
|
||||||
INSERT INTO `sales_manager` VALUES ('江奕健', 179421.480, 11725.000);
|
|
||||||
INSERT INTO `sales_manager` VALUES ('姜伟', 222300.092, 19919.872);
|
|
||||||
INSERT INTO `sales_manager` VALUES ('王倩倩', 691845.854, 92687.014);
|
|
||||||
INSERT INTO `sales_manager` VALUES ('杨洪光', 761143.054, 96180.574);
|
|
||||||
INSERT INTO `sales_manager` VALUES ('张怡莲', 558296.522, 93976.162);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for sales_month
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `sales_month`;
|
|
||||||
CREATE TABLE `sales_month` (
|
|
||||||
`month` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
|
||||||
`sales` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
`profit` decimal(10, 3) NULL DEFAULT NULL
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of sales_month
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `sales_month` VALUES ('1月', 226678.830, 37233.770);
|
|
||||||
INSERT INTO `sales_month` VALUES ('2月', 109855.158, 19834.458);
|
|
||||||
INSERT INTO `sales_month` VALUES ('3月', 167173.727, 18748.247);
|
|
||||||
INSERT INTO `sales_month` VALUES ('4月', 96984.692, 16501.352);
|
|
||||||
INSERT INTO `sales_month` VALUES ('5月', 232199.107, 23984.947);
|
|
||||||
INSERT INTO `sales_month` VALUES ('6月', 339729.698, 39157.118);
|
|
||||||
INSERT INTO `sales_month` VALUES ('7月', 140050.918, 11800.698);
|
|
||||||
INSERT INTO `sales_month` VALUES ('8月', 356128.507, 66818.087);
|
|
||||||
INSERT INTO `sales_month` VALUES ('9月', 322759.367, 24133.207);
|
|
||||||
INSERT INTO `sales_month` VALUES ('10月', 289269.169, 33635.329);
|
|
||||||
INSERT INTO `sales_month` VALUES ('11月', 342142.150, 42611.870);
|
|
||||||
INSERT INTO `sales_month` VALUES ('12月', 292702.956, 35330.176);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for sales_province
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `sales_province`;
|
|
||||||
CREATE TABLE `sales_province` (
|
|
||||||
`province` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
|
||||||
`sales` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
`profit` decimal(10, 3) NULL DEFAULT NULL
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of sales_province
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `sales_province` VALUES ('安徽', 113742.734, 32222.834);
|
|
||||||
INSERT INTO `sales_province` VALUES ('北京', 76154.540, 19854.240);
|
|
||||||
INSERT INTO `sales_province` VALUES ('福建', 102315.080, 32774.700);
|
|
||||||
INSERT INTO `sales_province` VALUES ('甘肃', 47267.444, -13210.036);
|
|
||||||
INSERT INTO `sales_province` VALUES ('广东', 254769.725, 58887.605);
|
|
||||||
INSERT INTO `sales_province` VALUES ('广西', 48349.532, 14036.932);
|
|
||||||
INSERT INTO `sales_province` VALUES ('贵州', 15893.136, 287.616);
|
|
||||||
INSERT INTO `sales_province` VALUES ('海南', 10995.880, 4132.940);
|
|
||||||
INSERT INTO `sales_province` VALUES ('河北', 227145.800, 43675.380);
|
|
||||||
INSERT INTO `sales_province` VALUES ('河南', 79220.540, 17722.600);
|
|
||||||
INSERT INTO `sales_province` VALUES ('黑龙江', 273877.632, 66982.132);
|
|
||||||
INSERT INTO `sales_province` VALUES ('湖北', 135006.900, -33492.340);
|
|
||||||
INSERT INTO `sales_province` VALUES ('湖南', 163503.277, 31399.277);
|
|
||||||
INSERT INTO `sales_province` VALUES ('吉林', 76539.617, 17712.317);
|
|
||||||
INSERT INTO `sales_province` VALUES ('江苏', 128183.776, -16801.764);
|
|
||||||
INSERT INTO `sales_province` VALUES ('江西', 29987.860, 7944.720);
|
|
||||||
INSERT INTO `sales_province` VALUES ('辽宁', 152250.028, -29393.812);
|
|
||||||
INSERT INTO `sales_province` VALUES ('内蒙古', 59787.252, -15047.368);
|
|
||||||
INSERT INTO `sales_province` VALUES ('宁夏', 12685.988, -900.592);
|
|
||||||
INSERT INTO `sales_province` VALUES ('山东', 192400.460, 49812.560);
|
|
||||||
INSERT INTO `sales_province` VALUES ('山西', 99782.900, 25386.900);
|
|
||||||
INSERT INTO `sales_province` VALUES ('陕西', 102767.168, 21152.628);
|
|
||||||
INSERT INTO `sales_province` VALUES ('上海', 99893.584, 17668.784);
|
|
||||||
INSERT INTO `sales_province` VALUES ('四川', 60567.584, -9514.876);
|
|
||||||
INSERT INTO `sales_province` VALUES ('天津', 95426.030, 20107.010);
|
|
||||||
INSERT INTO `sales_province` VALUES ('西藏', 1144.920, 400.260);
|
|
||||||
INSERT INTO `sales_province` VALUES ('新疆', 16700.880, 4683.000);
|
|
||||||
INSERT INTO `sales_province` VALUES ('云南', 79432.052, 16937.032);
|
|
||||||
INSERT INTO `sales_province` VALUES ('浙江', 94619.560, -27441.260);
|
|
||||||
INSERT INTO `sales_province` VALUES ('重庆', 65262.400, 11809.840);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for sales_region
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `sales_region`;
|
|
||||||
CREATE TABLE `sales_region` (
|
|
||||||
`region` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
|
||||||
`sales` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
`profit` decimal(10, 3) NULL DEFAULT NULL
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of sales_region
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `sales_region` VALUES ('东北', 502667.277, 55300.637);
|
|
||||||
INSERT INTO `sales_region` VALUES ('华北', 558296.522, 93976.162);
|
|
||||||
INSERT INTO `sales_region` VALUES ('华东', 761143.054, 96180.574);
|
|
||||||
INSERT INTO `sales_region` VALUES ('西北', 179421.480, 11725.000);
|
|
||||||
INSERT INTO `sales_region` VALUES ('西南', 222300.092, 19919.872);
|
|
||||||
INSERT INTO `sales_region` VALUES ('中南', 691845.854, 92687.014);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for sub_categories
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `sub_categories`;
|
|
||||||
CREATE TABLE `sub_categories` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`main_category_id` int NULL DEFAULT NULL,
|
|
||||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
|
||||||
`value` decimal(10, 3) NULL DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
|
||||||
INDEX `main_category_id`(`main_category_id`) USING BTREE,
|
|
||||||
CONSTRAINT `sub_categories_ibfk_1` FOREIGN KEY (`main_category_id`) REFERENCES `main_categories` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Records of sub_categories
|
|
||||||
-- ----------------------------
|
|
||||||
INSERT INTO `sub_categories` VALUES (1, 1, '标签', 18936.540);
|
|
||||||
INSERT INTO `sub_categories` VALUES (2, 1, '美术', 33038.096);
|
|
||||||
INSERT INTO `sub_categories` VALUES (3, 1, '器具', 449744.764);
|
|
||||||
INSERT INTO `sub_categories` VALUES (4, 1, '收纳具', 214582.200);
|
|
||||||
INSERT INTO `sub_categories` VALUES (5, 1, '系固件', 20045.480);
|
|
||||||
INSERT INTO `sub_categories` VALUES (6, 1, '信封', 51941.960);
|
|
||||||
INSERT INTO `sub_categories` VALUES (7, 1, '用品', 47070.128);
|
|
||||||
INSERT INTO `sub_categories` VALUES (8, 1, '纸张', 51413.740);
|
|
||||||
INSERT INTO `sub_categories` VALUES (9, 1, '装订机', 62497.316);
|
|
||||||
INSERT INTO `sub_categories` VALUES (10, 2, '电话', 330951.320);
|
|
||||||
INSERT INTO `sub_categories` VALUES (11, 2, '复印机', 347513.264);
|
|
||||||
INSERT INTO `sub_categories` VALUES (12, 2, '配件', 150562.664);
|
|
||||||
INSERT INTO `sub_categories` VALUES (13, 2, '设备', 108958.304);
|
|
||||||
INSERT INTO `sub_categories` VALUES (14, 3, '书架', 366969.540);
|
|
||||||
INSERT INTO `sub_categories` VALUES (15, 3, '椅子', 409393.054);
|
|
||||||
INSERT INTO `sub_categories` VALUES (16, 3, '用具', 83848.996);
|
|
||||||
INSERT INTO `sub_categories` VALUES (17, 3, '桌子', 168206.913);
|
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
|
||||||
7
experiment_5/task4/data/sales_manager.csv
Normal file
7
experiment_5/task4/data/sales_manager.csv
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
sales_manager,sales,profit
|
||||||
|
郝杰,502667.277,55300.637
|
||||||
|
江奕健,179421.48,11725
|
||||||
|
姜伟,222300.092,19919.872
|
||||||
|
王倩倩,691845.854,92687.014
|
||||||
|
杨洪光,761143.054,96180.574
|
||||||
|
张怡莲,558296.522,93976.162
|
||||||
|
13
experiment_5/task4/data/sales_month.csv
Normal file
13
experiment_5/task4/data/sales_month.csv
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
month,sales,profit
|
||||||
|
1月,226678.83,37233.77
|
||||||
|
2月,109855.158,19834.458
|
||||||
|
3月,167173.727,18748.247
|
||||||
|
4月,96984.692,16501.352
|
||||||
|
5月,232199.107,23984.947
|
||||||
|
6月,339729.698,39157.118
|
||||||
|
7月,140050.918,11800.698
|
||||||
|
8月,356128.507,66818.087
|
||||||
|
9月,322759.367,24133.207
|
||||||
|
10月,289269.169,33635.329
|
||||||
|
11月,342142.15,42611.87
|
||||||
|
12月,292702.956,35330.176
|
||||||
|
65
experiment_5/task4/data/sales_product.json
Normal file
65
experiment_5/task4/data/sales_product.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "办公用品",
|
||||||
|
"value": 949270.224,
|
||||||
|
"children": [{
|
||||||
|
"name": "标签",
|
||||||
|
"value": 18936.54
|
||||||
|
}, {
|
||||||
|
"name": "美术",
|
||||||
|
"value": 33038.096
|
||||||
|
}, {
|
||||||
|
"name": "器具",
|
||||||
|
"value": 449744.764
|
||||||
|
}, {
|
||||||
|
"name": "收纳具",
|
||||||
|
"value": 214582.2
|
||||||
|
}, {
|
||||||
|
"name": "系固件",
|
||||||
|
"value": 20045.48
|
||||||
|
}, {
|
||||||
|
"name": "信封",
|
||||||
|
"value": 51941.96
|
||||||
|
}, {
|
||||||
|
"name": "用品",
|
||||||
|
"value": 47070.128
|
||||||
|
}, {
|
||||||
|
"name": "纸张",
|
||||||
|
"value": 51413.74
|
||||||
|
},{
|
||||||
|
"name": "装订机",
|
||||||
|
"value": 62497.316
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"name": "技术",
|
||||||
|
"value": 937985.552,
|
||||||
|
"children": [{
|
||||||
|
"name": "电话",
|
||||||
|
"value": 330951.32
|
||||||
|
}, {
|
||||||
|
"name": "复印机",
|
||||||
|
"value": 347513.264
|
||||||
|
}, {
|
||||||
|
"name": "配件",
|
||||||
|
"value": 150562.664
|
||||||
|
}, {
|
||||||
|
"name": "设备",
|
||||||
|
"value": 108958.304
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"name": "家具",
|
||||||
|
"value": 1028418.503,
|
||||||
|
"children": [{
|
||||||
|
"name": "书架",
|
||||||
|
"value": 366969.54
|
||||||
|
}, {
|
||||||
|
"name": "椅子",
|
||||||
|
"value": 409393.054
|
||||||
|
}, {
|
||||||
|
"name": "用具",
|
||||||
|
"value": 83848.996
|
||||||
|
}, {
|
||||||
|
"name": "桌子",
|
||||||
|
"value": 168206.913
|
||||||
|
}]
|
||||||
|
}]
|
||||||
31
experiment_5/task4/data/sales_province.csv
Normal file
31
experiment_5/task4/data/sales_province.csv
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
province,sales,profit
|
||||||
|
安徽,113742.734,32222.834
|
||||||
|
北京,76154.54,19854.24
|
||||||
|
福建,102315.08,32774.7
|
||||||
|
甘肃,47267.444,-13210.036
|
||||||
|
广东,254769.725,58887.605
|
||||||
|
广西,48349.532,14036.932
|
||||||
|
贵州,15893.136,287.616
|
||||||
|
海南,10995.88,4132.94
|
||||||
|
河北,227145.8,43675.38
|
||||||
|
河南,79220.54,17722.6
|
||||||
|
黑龙江,273877.632,66982.132
|
||||||
|
湖北,135006.9,-33492.34
|
||||||
|
湖南,163503.277,31399.277
|
||||||
|
吉林,76539.617,17712.317
|
||||||
|
江苏,128183.776,-16801.764
|
||||||
|
江西,29987.86,7944.72
|
||||||
|
辽宁,152250.028,-29393.812
|
||||||
|
内蒙古,59787.252,-15047.368
|
||||||
|
宁夏,12685.988,-900.592
|
||||||
|
山东,192400.46,49812.56
|
||||||
|
山西,99782.9,25386.9
|
||||||
|
陕西,102767.168,21152.628
|
||||||
|
上海,99893.584,17668.784
|
||||||
|
四川,60567.584,-9514.876
|
||||||
|
天津,95426.03,20107.01
|
||||||
|
西藏,1144.92,400.26
|
||||||
|
新疆,16700.88,4683
|
||||||
|
云南,79432.052,16937.032
|
||||||
|
浙江,94619.56,-27441.26
|
||||||
|
重庆,65262.4,11809.84
|
||||||
|
7
experiment_5/task4/data/sales_region.csv
Normal file
7
experiment_5/task4/data/sales_region.csv
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
region,sales,profit
|
||||||
|
东北,502667.277,55300.637
|
||||||
|
华北,558296.522,93976.162
|
||||||
|
华东,761143.054,96180.574
|
||||||
|
西北,179421.48,11725
|
||||||
|
西南,222300.092,19919.872
|
||||||
|
中南,691845.854,92687.014
|
||||||
|
Binary file not shown.
180
experiment_5/task4/js/sales_manager.js
Normal file
180
experiment_5/task4/js/sales_manager.js
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
d3.csv("data/sales_manager.csv", function (error, data) {
|
||||||
|
// console.log(data);
|
||||||
|
|
||||||
|
var sales_data = []
|
||||||
|
var profit_data = []
|
||||||
|
var names = []
|
||||||
|
|
||||||
|
for ( i = 0; i < data.length; i++) {
|
||||||
|
var temp = {}
|
||||||
|
var temp1 = {}
|
||||||
|
|
||||||
|
temp['value'] = parseFloat(data[i].sales);
|
||||||
|
temp['name'] = data[i].sales_manager;
|
||||||
|
|
||||||
|
temp1['value'] = parseFloat(data[i].profit);
|
||||||
|
temp1['name'] = data[i].sales_manager;
|
||||||
|
|
||||||
|
sales_data.push(temp);
|
||||||
|
profit_data.push(temp1);
|
||||||
|
names.push(data[i].sales_manager)
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(sales_data)
|
||||||
|
// console.log(profit_data)
|
||||||
|
// console.log(names)
|
||||||
|
|
||||||
|
|
||||||
|
var myChart = echarts.init(document.getElementById('data_manager')); // 初始化一个图表实例
|
||||||
|
|
||||||
|
option = {
|
||||||
|
// 颜色数组,包括6种不同的颜色值
|
||||||
|
color: ["#EAEA26", "#906BF9", "#FE5656", "#01E17E", "#3DD1F9", "#FFAD05"],
|
||||||
|
// 图表的标题,文本为"销售情况 利润情况",位置在左侧,字体颜色为蓝色(#0099FF),字体大小为10。
|
||||||
|
title: {
|
||||||
|
text: ' 销售情况 利润情况',
|
||||||
|
left: 'left',
|
||||||
|
textStyle: {
|
||||||
|
color: '#0099FF',
|
||||||
|
fontSize: 10,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 提示框配置
|
||||||
|
tooltip: {
|
||||||
|
// 表示当鼠标悬停在数据项上时触发提示框
|
||||||
|
trigger: 'item',
|
||||||
|
// 定义了提示框的显示格式,包括数据系列的名称({a})、数据项的名称({b})、数值({c})和百分比({d}%)
|
||||||
|
formatter: '{a} <br/>{b} : {c} ({d}%)'
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
left: 'center', // 图例水平居中显示
|
||||||
|
top: 'bottom', // 图例位于图表底部
|
||||||
|
data: names, // 图例的数据项为names数组,即每个数据项的名称
|
||||||
|
// 图例文本的样式,包括颜色数组
|
||||||
|
textStyle: {
|
||||||
|
color: ["#EAEA26", "#906BF9", "#FE5656", "#01E17E", "#3DD1F9", "#FFAD05"],
|
||||||
|
},
|
||||||
|
padding: 0, // 图例的内边距为0
|
||||||
|
itemGap: 3, // 图例项之间的间距为3
|
||||||
|
itemWidth: 30, // 图例项的宽度为30
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: '销售额', // 图表的名称
|
||||||
|
type: 'pie', // 饼图
|
||||||
|
radius: [5, 85], // 饼图的半径范围,从5到85
|
||||||
|
center: ['30%', '50%'], // 饼图的中心位置在容器的30%宽度和50%高度处
|
||||||
|
roseType: 'area', // 使用面积模式绘制玫瑰图
|
||||||
|
// 标签的显示方式,这里设置为不显示标签
|
||||||
|
label: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
// 标签线的显示方式,这里设置为不显示标签线
|
||||||
|
labelLine: {
|
||||||
|
normal: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 高亮状态下的样式,这里设置为不显示高亮状态下的标签
|
||||||
|
emphasis: {
|
||||||
|
label: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: sales_data, // 饼图的数据为sales_data数组
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '利润', // 图表的名称
|
||||||
|
type: 'pie', // 饼图
|
||||||
|
radius: [5, 85], // 饼图的半径范围,从5到85
|
||||||
|
center: ['80%', '50%'], // 饼图的中心位置在容器的80%宽度和50%高度处
|
||||||
|
roseType: 'area', // 使用面积模式绘制玫瑰图
|
||||||
|
// 标签的显示方式,这里设置为不显示标签
|
||||||
|
label: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
// 标签线的显示方式,这里设置为不显示标签线
|
||||||
|
labelLine: {
|
||||||
|
normal: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: profit_data, // 饼图的数据为profit_data数组
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
myChart.setOption(option);
|
||||||
|
|
||||||
|
// 这段代码是用于在 ECharts 图表中实现自动轮播的效果。
|
||||||
|
// 每隔2秒钟,图表会自动切换到下一个数据项,并高亮显示当前数据项以及显示对应的提示框(tooltip)。
|
||||||
|
var currentIndex = -1;
|
||||||
|
var pie_index = -1;
|
||||||
|
var pie_index1 = 0
|
||||||
|
setInterval(function () {
|
||||||
|
var dataLen = option.series[1].data.length;
|
||||||
|
console.log(option.series[1].data);
|
||||||
|
console.log(dataLen); // 6
|
||||||
|
/*
|
||||||
|
pie_index
|
||||||
|
-1 0
|
||||||
|
0 1
|
||||||
|
1 2
|
||||||
|
...
|
||||||
|
10 11
|
||||||
|
11 0
|
||||||
|
*/
|
||||||
|
pie_index = pie_index == 11 ? 0 : (pie_index + 1)
|
||||||
|
// console.log(currentIndex1)
|
||||||
|
// 取消之前高亮的图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'downplay',
|
||||||
|
/*
|
||||||
|
seriesIndex
|
||||||
|
0
|
||||||
|
*/
|
||||||
|
seriesIndex: pie_index1,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
currentIndex
|
||||||
|
-1 0
|
||||||
|
0 1
|
||||||
|
1 2
|
||||||
|
...
|
||||||
|
5 0
|
||||||
|
*/
|
||||||
|
currentIndex = (currentIndex + 1) % dataLen;
|
||||||
|
/*
|
||||||
|
pie_index
|
||||||
|
0 0
|
||||||
|
1 0
|
||||||
|
...
|
||||||
|
5 0
|
||||||
|
6 1
|
||||||
|
...
|
||||||
|
11 1
|
||||||
|
*/
|
||||||
|
pie_index1 = parseInt(pie_index / 6)
|
||||||
|
// 高亮当前图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'highlight',
|
||||||
|
seriesIndex: pie_index1,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
// 显示提示框
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'showTip',
|
||||||
|
seriesIndex: pie_index1,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
227
experiment_5/task4/js/sales_month.js
Normal file
227
experiment_5/task4/js/sales_month.js
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
d3.csv("data/sales_month.csv", function (error, data) {
|
||||||
|
// console.log(data);
|
||||||
|
var month = [];
|
||||||
|
var sales = [];
|
||||||
|
var profit = [];
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
month.push(data[i].month);
|
||||||
|
sales.push(Math.round(data[i].sales / 100) / 100);
|
||||||
|
profit.push(Math.round(data[i].profit / 100) / 100);
|
||||||
|
}
|
||||||
|
// console.log("---month---")
|
||||||
|
// console.log(month)
|
||||||
|
// console.log("---sales---")
|
||||||
|
// console.log(sales)
|
||||||
|
// console.log("---profit---")
|
||||||
|
// console.log(profit)
|
||||||
|
|
||||||
|
var myChart = echarts.init(document.getElementById('data_month'));
|
||||||
|
var option = {
|
||||||
|
legend: {
|
||||||
|
data: ['销售额(万元)', '利润(万元)'], // 图例的数据为两个指标,注册总量和访问总量
|
||||||
|
x: 'center', // 图例的水平位置为居中
|
||||||
|
y: 'top', // 图例的垂直位置为顶部
|
||||||
|
padding: [5, 0, 0, 0], // 图例的内边距,分别为上、右、下、左,这里设置为上边距为5。
|
||||||
|
textStyle: { // 设置图例文字的样式
|
||||||
|
// color: '00F1F3', // 图例文字的颜色
|
||||||
|
color: ['#E78932', '#2094CA'],
|
||||||
|
fontSize: 10, // 图例文字的字体大小为10
|
||||||
|
},
|
||||||
|
itemWidth: 28, // 图例项的宽度为28
|
||||||
|
itemHeight: 12, // 图例项的高度为12
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
show: false, // 表示不显示网格
|
||||||
|
left: 0, // 网格距离容器左侧的距离为0
|
||||||
|
right: 20, // 网格距离容器右侧的距离为20
|
||||||
|
bottom: 0, // 网格距离容器底部的距离为0
|
||||||
|
top: '15%', // 网格距离容器顶部的距离为容器高度的15%
|
||||||
|
containLabel: true, // 网格区域包含数据标签
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
show: true, // 显示提示框
|
||||||
|
trigger: 'axis', // 提示框的触发方式为坐标轴触发,即当鼠标悬停在坐标轴上时,提示框会显示相关信息
|
||||||
|
|
||||||
|
// 设置坐标轴指示器的样式
|
||||||
|
axisPointer: {
|
||||||
|
type: 'line', // 坐标轴指示器的类型为直线,即在触发点处显示一条直线标记
|
||||||
|
// 设置坐标轴指示器标签的样式
|
||||||
|
label: {
|
||||||
|
show: true, // 显示坐标轴指示器标签
|
||||||
|
// color:'none',
|
||||||
|
fontSize: 8, // 坐标轴指示器标签的字体大小为8
|
||||||
|
},
|
||||||
|
// 设置坐标轴指示器线条的样式
|
||||||
|
lineStyle: {
|
||||||
|
color: '#2094CA', // 坐标轴指示器线条的颜色为蓝色
|
||||||
|
type: 'dotted', // 坐标轴指示器线条的类型为虚线
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 10, // 提示框文字的字体大小为10
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// 设置x轴的样式和数据
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
type: 'category', // x轴的类型为类别型,即显示的是离散的数据点。
|
||||||
|
boundaryGap: false, // 表示x轴两端不留空白
|
||||||
|
// 设置x轴标签的样式
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 8, // x轴标签的字体大小为8
|
||||||
|
color: '#2094CA', // x轴标签的颜色为蓝色
|
||||||
|
},
|
||||||
|
data: month, // x轴的数据为['A', 'B', 'C', 'D', 'E', 'F']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 设置y轴的样式
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
splitLine: {show: false}, // 不显示y轴的分割线
|
||||||
|
type: 'value', // y轴的类型为数值型,即显示的是连续的数据值
|
||||||
|
// 设置y轴标签的样式
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 8, // y轴标签的字体大小为8
|
||||||
|
color: '#2094CA', // y轴标签的颜色为蓝色
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: '销售额(万元)', // 该图表的名称为"注册总量"
|
||||||
|
type: 'line', // 图表类型为折线图
|
||||||
|
symbol: 'circle', // 数据点的形状为圆形
|
||||||
|
symbolSize: 4, // 数据点的大小为4
|
||||||
|
// 设置数据点的样式
|
||||||
|
itemStyle: {
|
||||||
|
normal: {// 正常状态下的数据点样式
|
||||||
|
color: '#E78932', // 数据点的颜色为橙色
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lineStyle: {// 设置线条的样式
|
||||||
|
color: '#E78932', // 线条的颜色为橙色
|
||||||
|
width: 1, // 线条的宽度为1
|
||||||
|
},
|
||||||
|
label: {// 设置标签的样式
|
||||||
|
show: false, // 表示显示标签
|
||||||
|
position: 'top', // 标签的位置在数据点的上方
|
||||||
|
// 设置标签文字的样式
|
||||||
|
textStyle: {
|
||||||
|
color: '#E78932', // 标签文字的颜色为橙色
|
||||||
|
},
|
||||||
|
fontSize: 8, // 标签文字的字体大小为8
|
||||||
|
},
|
||||||
|
// 设置区域填充的样式
|
||||||
|
areaStyle: {
|
||||||
|
// 区域填充的颜色渐变
|
||||||
|
color: {
|
||||||
|
type: 'linear', // 颜色渐变的类型为线性渐变
|
||||||
|
// 渐变的起点和终点坐标
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
x2: 0,
|
||||||
|
y2: 1,
|
||||||
|
// 渐变的颜色停止点,颜色渐变是从上到下,从深橙色(#D98234)过渡到深灰色(#33313C)
|
||||||
|
colorStops: [{
|
||||||
|
offset: 0, color: '#D98234' // 0% 处的颜色 表示第一个颜色停止点,偏移量为0,颜色为深橙色
|
||||||
|
}, {
|
||||||
|
offset: 1, color: '#33313C' // 100% 处的颜色 表示第二个颜色停止点,偏移量为1,颜色为深灰色
|
||||||
|
}],
|
||||||
|
global: false // 渐变不全局应用
|
||||||
|
},
|
||||||
|
|
||||||
|
// color:'#CE7E35',
|
||||||
|
// color:'#1C7DEE',
|
||||||
|
// color:'#5FB397',
|
||||||
|
opacity: 0.5, // 区域的透明度为0.5
|
||||||
|
},
|
||||||
|
data: sales, // 折线图的数据
|
||||||
|
showAllSymbol: true, // 显示所有数据点
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '利润(万元)', // 图表的名称为"访问总量"
|
||||||
|
type: 'line', // 图表类型为折线图
|
||||||
|
symbol: 'circle', // 数据点的形状为圆形
|
||||||
|
symbolSize: 4, // 数据点的大小为4
|
||||||
|
itemStyle: {// 设置数据点的样式
|
||||||
|
normal: {// 正常状态下的数据点样式
|
||||||
|
// borderColor:'#0099FF',
|
||||||
|
color: '#0099FF', // 数据点的颜色为蓝色
|
||||||
|
},
|
||||||
|
},
|
||||||
|
label: {// 设置标签的样式
|
||||||
|
show: false, // 显示标签
|
||||||
|
position: 'top', // 标签的位置在数据点的上方
|
||||||
|
textStyle: {// 设置标签文字的样式
|
||||||
|
color: '#0099FF', // 标签文字的颜色为蓝色
|
||||||
|
},
|
||||||
|
fontSize: 8, // 标签文字的字体大小为8
|
||||||
|
},
|
||||||
|
lineStyle: {// 设置线条的样式
|
||||||
|
color: '#0099FF', // 线条的颜色为蓝色
|
||||||
|
width: 0, // 线条的宽度为0
|
||||||
|
},
|
||||||
|
areaStyle: {// 设置区域填充的样式
|
||||||
|
color: {// 区域填充的颜色渐变
|
||||||
|
type: 'linear', // 颜色渐变的类型为线性渐变
|
||||||
|
// 渐变的起点和终点坐标
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
x2: 0,
|
||||||
|
y2: 1,
|
||||||
|
// 渐变的颜色停止点
|
||||||
|
colorStops: [{
|
||||||
|
offset: 0, color: '#0099FF' // 0% 处的颜色 表示第一个颜色停止点,偏移量为0,颜色为蓝色
|
||||||
|
}, {
|
||||||
|
offset: 1, color: '#394E7F' // 100% 处的颜色 表示第二个颜色停止点,偏移量为1,颜色为深蓝色
|
||||||
|
}],
|
||||||
|
global: false // 渐变不全局应用
|
||||||
|
},
|
||||||
|
opacity: 0.3, // 区域的透明度为0.3
|
||||||
|
},
|
||||||
|
data: profit, // 折线图的数据
|
||||||
|
showAllSymbol: true, // 显示所有数据点
|
||||||
|
},
|
||||||
|
]
|
||||||
|
};
|
||||||
|
// 将配置项和数据应用到图表上
|
||||||
|
myChart.setOption(option)
|
||||||
|
|
||||||
|
// 用于在图表中周期性地高亮显示数据点并显示相应的提示框(tooltip)
|
||||||
|
var currentIndex = -1; // 初始化当前索引为-1
|
||||||
|
// 设置一个定时器,每隔2000毫秒执行一次函数内的代码块
|
||||||
|
setInterval(function () {
|
||||||
|
var dataLen = option.series[0].data.length; // 获取图表中第一个系列的数据长度
|
||||||
|
console.log(option.series[0].data);
|
||||||
|
console.log(dataLen); // 6
|
||||||
|
// 调用 dispatchAction 方法来执行特定的操作,包括取消之前高亮的图形、高亮当前图形和显示提示框。
|
||||||
|
// 取消之前高亮的图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'downplay',
|
||||||
|
seriesIndex: 0, // 表示操作第一个系列
|
||||||
|
dataIndex: currentIndex // 表示操作的数据索引为当前索引
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
-1 0
|
||||||
|
0 1
|
||||||
|
1 2
|
||||||
|
...
|
||||||
|
5 0
|
||||||
|
*/
|
||||||
|
currentIndex = (currentIndex + 1) % dataLen; // 更新当前索引,使其循环递增,直到达到数据长度
|
||||||
|
// 高亮当前图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'highlight',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
// 显示提示框
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'showTip',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
})
|
||||||
81
experiment_5/task4/js/sales_product.js
Normal file
81
experiment_5/task4/js/sales_product.js
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
d3.json("data/sales_product.json", function (error, data) {
|
||||||
|
// console.log(data);
|
||||||
|
var myChart = echarts.init(document.getElementById('data_product'));
|
||||||
|
|
||||||
|
var color = [
|
||||||
|
"#00C6FB",
|
||||||
|
"#5781FD",
|
||||||
|
"#4DB1CB",
|
||||||
|
// "#3EBD7C",
|
||||||
|
// "#F7A925",
|
||||||
|
// "#bda29a",
|
||||||
|
// "#ca8622",
|
||||||
|
// "#749f83",
|
||||||
|
// "#6e7074",
|
||||||
|
// "#546570",
|
||||||
|
// "#c4ccd3"
|
||||||
|
];
|
||||||
|
|
||||||
|
option = {
|
||||||
|
tooltip: {},
|
||||||
|
series: [{
|
||||||
|
name: '销售额', // 图表的名称
|
||||||
|
type: 'treemap', // 图表的类型树状图
|
||||||
|
roam: false, // 是否允许鼠标缩放和平移,这里设置为false,表示不允许
|
||||||
|
nodeClick: false, // 是否允许点击节点进行交互,这里设置为false,表示不允许
|
||||||
|
breadcrumb: false, // 是否显示导航路径,这里设置为false,表示不显示
|
||||||
|
// 分别设置图表的左边距、右边距、上边距和下边距,这里都设置为0。
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
bottom: 0,
|
||||||
|
itemStyle: {
|
||||||
|
borderColor: '#062e62' // 定义节点的样式,这里设置了边框颜色为'#062e62'
|
||||||
|
},
|
||||||
|
// 定义节点标签的样式,这里设置了字体大小为8,颜色为白色
|
||||||
|
label: {
|
||||||
|
fontSize: 8,
|
||||||
|
color: '#fff',
|
||||||
|
},
|
||||||
|
// 用于定义树状图的层级样式
|
||||||
|
levels: [{// 定义了多个层级的样式
|
||||||
|
color: color, // 设置节点的颜色
|
||||||
|
itemStyle: {// 定义节点的样式
|
||||||
|
normal: {// 正常状态下的样式
|
||||||
|
borderWidth: 0, // 边框宽度,这里设置为0,表示无边框
|
||||||
|
borderColor: '#062e62', // 设置边框颜色
|
||||||
|
gapWidth: 5 // 设置节点之间的间隔宽度
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
//colorSaturation: [0.35, 0.6],
|
||||||
|
colorAlpha: [1, 0.5], // 节点颜色的透明度,这里设置为[1, 0.5],表示正常状态下节点的颜色透明度为1,鼠标悬停时透明度为0.5。
|
||||||
|
upperLabel: {// 定义上层节点标签的样式
|
||||||
|
normal: {// 定义正常状态下的样式
|
||||||
|
color: '#00C6FB', // 设置标签颜色
|
||||||
|
fontSize: 10, // 设置标签字体大小
|
||||||
|
show: true, // 是否显示标签,这里设置为true,表示显示
|
||||||
|
height: 15 // 设置标签高度
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemStyle: {// 定义节点的样式
|
||||||
|
normal: {// 定义正常状态下的样式
|
||||||
|
borderWidth: 5, // 设置边框宽度
|
||||||
|
borderColor: '#062e62', // 设置边框颜色
|
||||||
|
gapWidth: 1, // 设置节点之间的间隔宽度
|
||||||
|
},
|
||||||
|
emphasis: {// 定义鼠标悬停时的样式
|
||||||
|
borderColor: '#ccc' // 设置边框颜色
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
leafDepth: 2, // 树的叶子节点深度,其值为2
|
||||||
|
data: data// 数据源
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
myChart.setOption(option)
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
316
experiment_5/task4/js/sales_province.js
Normal file
316
experiment_5/task4/js/sales_province.js
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
d3.csv("data/sales_province.csv", function (error, data) {
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
var sales_province = [];
|
||||||
|
var profit_province = [];
|
||||||
|
var sales = [];
|
||||||
|
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
var temp = {};
|
||||||
|
var temp1 = {};
|
||||||
|
temp['name'] = data[i].province;
|
||||||
|
temp['value'] = parseFloat(data[i].sales);
|
||||||
|
temp1['name'] = data[i].province;
|
||||||
|
temp1['value'] = parseFloat(data[i].profit);
|
||||||
|
|
||||||
|
sales_province.push(temp);
|
||||||
|
profit_province.push(temp1);
|
||||||
|
sales.push(parseFloat(data[i].sales));
|
||||||
|
}
|
||||||
|
var sales_total = Math.round(d3.sum(sales) / 10000);
|
||||||
|
|
||||||
|
console.log(sales_province);
|
||||||
|
console.log(profit_province);
|
||||||
|
console.log(sales);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var myChart = echarts.init(document.getElementById('data_province'));
|
||||||
|
// 使用ECharts库创建一个中国地图,并显示各个省份的销售数据
|
||||||
|
var mapName = 'china'
|
||||||
|
|
||||||
|
|
||||||
|
var geoCoordMap = {}; // 空对象,用于存储地理坐标信息
|
||||||
|
|
||||||
|
/*获取地图数据*/
|
||||||
|
myChart.showLoading(); // 显示加载动画
|
||||||
|
var mapFeatures = echarts.getMap(mapName).geoJson.features; // 获取地图的地理信息数据
|
||||||
|
console.log("========mapFeatures=========");
|
||||||
|
console.log(mapFeatures);
|
||||||
|
myChart.hideLoading(); // 隐藏加载动画
|
||||||
|
// 遍历地理信息数据中的每个地区,将地区名称和经纬度存储到 geoCoordMap 对象中。
|
||||||
|
// 对于每个地区,首先获取其名称和经纬度,然后将名称作为键,经纬度作为值存储到 geoCoordMap 对象中。
|
||||||
|
mapFeatures.forEach(function (v) {
|
||||||
|
console.log("==========v===========");
|
||||||
|
console.log(v);
|
||||||
|
// 地区名称
|
||||||
|
var name = v.properties.name;
|
||||||
|
// 地区经纬度
|
||||||
|
geoCoordMap[name] = v.properties.cp;
|
||||||
|
|
||||||
|
});
|
||||||
|
console.log("===========geoCoordMap=============");
|
||||||
|
console.log(geoCoordMap);
|
||||||
|
var max = 480,
|
||||||
|
min = 9; // todo
|
||||||
|
var maxSize4Pin = 100,
|
||||||
|
minSize4Pin = 20;
|
||||||
|
|
||||||
|
// 该函数的作用是将输入的数据转换为特定格式的数组。
|
||||||
|
var convertData = function (data) {
|
||||||
|
console.log("=======data========");
|
||||||
|
console.log(data);
|
||||||
|
var res = []; // 创建一个空数组 res
|
||||||
|
// 遍历输入数据 data 中的每个元素
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
var geoCoord = geoCoordMap[data[i].name];
|
||||||
|
console.log("========geoCoord========");
|
||||||
|
console.log(geoCoord);
|
||||||
|
// 将该元素的名称和值(以及经纬度信息)组成一个新的对象,并将其添加到 res 数组中
|
||||||
|
if (geoCoord) {
|
||||||
|
res.push({
|
||||||
|
name: data[i].name,
|
||||||
|
value: geoCoord.concat(data[i].value),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("========res=======");
|
||||||
|
console.log(res);
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
option = {
|
||||||
|
// backgroundColor: '#013954',
|
||||||
|
// title: {
|
||||||
|
// text: "2019年各省份销售和利润情况", // 标题的文本为 "2019年各省份销售和利润情况"
|
||||||
|
// // 标题文本的样式信息,包括对齐方式(居中)、颜色(白色)和字体大小(20)
|
||||||
|
// textStyle: {
|
||||||
|
// align: 'center',
|
||||||
|
// color: '#fff',
|
||||||
|
// fontSize: 20,
|
||||||
|
// },
|
||||||
|
// top: '5%', // 标题的位置在垂直方向上为距离顶部5%
|
||||||
|
// left: 'center', // 标题的位置在水平方向上为居中
|
||||||
|
// },
|
||||||
|
tooltip: {
|
||||||
|
padding: 0, // 提示框内边距为0
|
||||||
|
enterable: true, // 提示框可以鼠标进入
|
||||||
|
transitionDuration: 1, // 提示框显示和隐藏的过渡时间为1秒
|
||||||
|
// 提示框文本的样式信息,包括颜色(黑色)、装饰(无)
|
||||||
|
textStyle: {
|
||||||
|
color: '#000',
|
||||||
|
decoration: 'none',
|
||||||
|
},
|
||||||
|
// 用于自定义提示框的内容
|
||||||
|
// 通过传入的参数params获取当前数据的名称、销售额和利润,然后拼接成一个HTML字符串作为提示框的内容。
|
||||||
|
formatter: function (params) {
|
||||||
|
console.log("========params========");
|
||||||
|
console.log(params);
|
||||||
|
var tipHtml = '';
|
||||||
|
tipHtml = '<div style="width:180px;height:120px;background:rgba(22,80,158,0.8);border:1px solid rgba(7,166,255,0.7)">'
|
||||||
|
+ '<div style="width:90%;height:30px;line-height:30px;border-bottom:2px solid rgba(7,166,255,0.7);padding:0 10px">' + '<i style="display:inline-block;width:8px;height:8px;background:#16d6ff;border-radius:30px;">' + '</i>'
|
||||||
|
+ '<span style="margin-left:10px;color:#fff;font-size:16px;">' + params.name + '</span>' + '</div>'
|
||||||
|
+ '<div style="padding:10px">'
|
||||||
|
+ '<p style="color:#fff;font-size:12px;">' + '<i style="display:inline-block;width:10px;height:10px;background:#16d6ff;border-radius:40px;margin:0 8px">' + '</i>'
|
||||||
|
+ '销售额:' + '<span style="color:#11ee7d;margin:0 6px;">' + sales_province[params.dataIndex].value + '</span>' + '元' + '</p>'
|
||||||
|
+ '<p style="color:#fff;font-size:12px;">' + '<i style="display:inline-block;width:10px;height:10px;background:#16d6ff;border-radius:40px;margin:0 8px">' + '</i>'
|
||||||
|
+ '利润:' + '<span style="color:#f48225;margin:0 6px;">' + profit_province[params.dataIndex].value + '</span>' + '元' + '</p>'
|
||||||
|
+ '</div>' + '</div>';
|
||||||
|
// console.log("=======tipHtml========");
|
||||||
|
// console.log(tipHtml);
|
||||||
|
return tipHtml;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 设置视觉映射组件(visualMap)的样式和属性
|
||||||
|
visualMap: {
|
||||||
|
show: true, // 显示视觉映射组件
|
||||||
|
min: 0, // 视觉映射组件的最小值
|
||||||
|
max: 300000, // 视觉映射组件的最大值
|
||||||
|
left: '10%', // 视觉映射组件距离容器左侧的距离为容器宽度的10%
|
||||||
|
top: 'bottom', // 视觉映射组件的位置在容器底部
|
||||||
|
calculable: true, // 视觉映射组件可以计算数据
|
||||||
|
seriesIndex: [1], // 视觉映射组件关联的数据系列索引为1
|
||||||
|
// 视觉映射组件的颜色范围,从蓝色(#04387b)到浅蓝色(#467bc0)
|
||||||
|
inRange: {
|
||||||
|
color: ['#04387b', '#467bc0'] // 蓝绿
|
||||||
|
},
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff'
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
geo: {
|
||||||
|
show: true, // 显示地理坐标系组件
|
||||||
|
map: mapName, // 使用的地图名称为mapName
|
||||||
|
// 表示不显示标签
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
roam: false, // 禁止鼠标缩放和平移地图
|
||||||
|
// 地图区域的颜色和边框颜色
|
||||||
|
itemStyle: {
|
||||||
|
// 在正常状态下,区域颜色为深蓝色(#023677),边框颜色为浅蓝色(#1180c7)
|
||||||
|
normal: {
|
||||||
|
areaColor: '#023677',
|
||||||
|
borderColor: '#1180c7',
|
||||||
|
},
|
||||||
|
// 在高亮状态下,区域颜色为浅蓝色(#4499d0)
|
||||||
|
emphasis: {
|
||||||
|
areaColor: '#4499d0',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: '散点', // 图表的名称
|
||||||
|
type: 'scatter', // 图表类型为散点图
|
||||||
|
coordinateSystem: 'geo', // 使用的坐标系为地理坐标系
|
||||||
|
data: convertData(profit_province), // 使用convertData函数处理传入的数据作为散点图的数据源
|
||||||
|
symbolSize: function (val) {// 散点的大小由数据的第三个值决定
|
||||||
|
console.log("========val=========");
|
||||||
|
console.log(val);
|
||||||
|
return val[2] / 8000;
|
||||||
|
},
|
||||||
|
// 标签的显示方式
|
||||||
|
label: {
|
||||||
|
// 在正常状态下,标签显示省份名称({b}),位置在右侧,字体大小为8
|
||||||
|
normal: {
|
||||||
|
formatter: '{b}',
|
||||||
|
position: 'right',
|
||||||
|
show: true,
|
||||||
|
fontSize: 8,
|
||||||
|
},
|
||||||
|
// 在高亮状态下,标签始终显示。
|
||||||
|
emphasis: {
|
||||||
|
show: true,
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// animation: false,
|
||||||
|
// 散点的颜色为白色
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: '#fff',
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'map', // 图表类型为地图
|
||||||
|
map: mapName, // 使用的地图名称为mapName
|
||||||
|
geoIndex: 0, // 地理坐标系组件在组件列表中的索引为0
|
||||||
|
aspectScale: 0.5, // 地图的长宽比为0.5
|
||||||
|
showLegendSymbol: false, // 存在图例时不显示图例中的符号
|
||||||
|
// 标签的显示方式
|
||||||
|
label: {
|
||||||
|
// 在正常状态下,标签始终显示
|
||||||
|
normal: {
|
||||||
|
show: true
|
||||||
|
},
|
||||||
|
// 在高亮状态下,标签不显示,并且文本颜色为白色
|
||||||
|
emphasis: {
|
||||||
|
show: false,
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
roam: true, // 允许鼠标缩放和平移地图
|
||||||
|
// 地图区域的颜色和边框颜色
|
||||||
|
itemStyle: {
|
||||||
|
// 在正常状态下,区域颜色为深蓝色(#031525),边框颜色为白色(#FFFFFF)
|
||||||
|
normal: {
|
||||||
|
areaColor: '#031525',
|
||||||
|
borderColor: '#FFFFFF',
|
||||||
|
},
|
||||||
|
// 在高亮状态下,区域颜色为浅蓝色(#2B91B7)。
|
||||||
|
emphasis: {
|
||||||
|
areaColor: '#2B91B7'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
animation: false, // 不使用动画效果
|
||||||
|
data: sales_province // 地图的数据源
|
||||||
|
},
|
||||||
|
// 设置散点图的样式和属性
|
||||||
|
{
|
||||||
|
name: '点', // 图表的名称
|
||||||
|
type: 'scatter', // 图表类型为散点图
|
||||||
|
coordinateSystem: 'geo', // 使用的坐标系为地理坐标系
|
||||||
|
zlevel: 6, // 散点的层级为6,用于控制散点在图表中的显示顺序
|
||||||
|
},
|
||||||
|
// 设置特效散点图的样式和属性
|
||||||
|
{
|
||||||
|
name: 'Top 5', // 图表的名称
|
||||||
|
type: 'effectScatter', // 图表类型为特效散点图
|
||||||
|
// animation: false,
|
||||||
|
coordinateSystem: 'geo', // 使用的坐标系为地理坐标系
|
||||||
|
data: convertData(profit_province), // 使用convertData函数处理后的数据作为散点图的数据源
|
||||||
|
// 散点的大小由数据的第三个值决定
|
||||||
|
symbolSize: function (val) {
|
||||||
|
return val[2] / 8000;
|
||||||
|
},
|
||||||
|
showEffectOn: 'render', // 在渲染时显示特效
|
||||||
|
rippleEffect: { //涟漪特效
|
||||||
|
period: 4, //动画时间,值越小速度越快
|
||||||
|
brushType: 'stroke', //波纹绘制方式为描边
|
||||||
|
scale: 4 //波纹圆环最大限制,值越大波纹越大
|
||||||
|
},
|
||||||
|
hoverAnimation: true, // 鼠标悬停时显示动画效果
|
||||||
|
// 标签的配置项
|
||||||
|
label: {
|
||||||
|
normal: {// 正常状态下
|
||||||
|
formatter: '{b}', // 标签显示省份名称({b})
|
||||||
|
position: 'left', // 标签位置在左侧
|
||||||
|
show: false // 不显示标签
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 散点样式的配置项
|
||||||
|
itemStyle: {
|
||||||
|
normal: {// 正常状态下
|
||||||
|
color: 'yellow', // 散点颜色为黄色
|
||||||
|
shadowBlur: 10, // 阴影模糊度为10
|
||||||
|
shadowColor: 'yellow' // 阴影颜色为黄色
|
||||||
|
}
|
||||||
|
},
|
||||||
|
zlevel: 1 // 散点的层级为1,用于控制散点在图表中的显示顺序
|
||||||
|
},
|
||||||
|
]
|
||||||
|
};
|
||||||
|
myChart.setOption(option)
|
||||||
|
var currentIndex = -1;
|
||||||
|
setInterval(function () {
|
||||||
|
var dataLen = option.series[0].data.length;
|
||||||
|
// 取消之前高亮的图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'downplay',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
currentIndex = (currentIndex + 1) % dataLen;
|
||||||
|
// 高亮当前图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'highlight',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
// 显示 tooltip
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'showTip',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
var title1 = document.getElementById("title1");
|
||||||
|
title1.style.fontWeight = "bold";
|
||||||
|
title1.style.color = "#2094CA";
|
||||||
|
title1.style.fontSize = "14px";
|
||||||
|
title1.innerHTML = "2019年全国销售额共 <b style='color:#E78932;font-size:24px'>" + sales_total + " </b>万元"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
159
experiment_5/task4/js/sales_region.js
Normal file
159
experiment_5/task4/js/sales_region.js
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
d3.csv("data/sales_region.csv", function (error, data) {
|
||||||
|
// console.log(data);
|
||||||
|
var region = [];
|
||||||
|
var sales = [];
|
||||||
|
var profit = [];
|
||||||
|
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
region.push(data[i].region)
|
||||||
|
sales.push(parseFloat(data[i].sales))
|
||||||
|
profit.push(parseFloat(data[i].profit))
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(region)
|
||||||
|
// console.log(sales)
|
||||||
|
// console.log(profit)
|
||||||
|
|
||||||
|
var myChart = echarts.init(document.getElementById('data_region'));
|
||||||
|
var option = {
|
||||||
|
// backgroundColor: '#323a5e', // 图表的背景颜色为 '#323a5e'
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis', // 表示提示框的触发方式为坐标轴触发,即当鼠标悬停在坐标轴上时,提示框会显示相关信息。
|
||||||
|
axisPointer: {
|
||||||
|
type: 'shadow' // 表示坐标轴指示器的样式为阴影,即鼠标悬停时,会在对应的数据点周围显示一个阴影区域。
|
||||||
|
},
|
||||||
|
textStyle: {// 提示框文本的样式,包括颜色(蓝色)和字体大小(10像素)。
|
||||||
|
color: '#0099FF',
|
||||||
|
fontSize: 10,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
left: '2%', // 图表距离容器左侧的距离为2%
|
||||||
|
right: '4%', // 图表距离容器右侧的距离为4%
|
||||||
|
bottom: '14%', // 图表距离容器底部的距离为14%
|
||||||
|
top: '16%', // 图表距离容器顶部的距离为16%
|
||||||
|
containLabel: true // 是否包含坐标轴刻度标签在内,设置为true表示包含
|
||||||
|
},
|
||||||
|
// 设置图例(legend)的样式和位置
|
||||||
|
legend: {
|
||||||
|
data: ['销售额', '利润'], // 表示图例中包含两个数据项
|
||||||
|
right: 10, // 图例距离容器右侧的距离为10
|
||||||
|
top: 12, // 图例距离容器顶部的距离为12
|
||||||
|
// 图例文本的颜色为白色,字体大小为10
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
fontSize: 10,
|
||||||
|
},
|
||||||
|
|
||||||
|
itemWidth: 12, // 图例中每个数据项的宽度为12
|
||||||
|
itemHeight: 10, // 图例中每个数据项的高度为10
|
||||||
|
// itemGap: 35
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category', // x轴的类型为类别型,即显示的是离散的数据点。
|
||||||
|
data: region,
|
||||||
|
axisLine: {
|
||||||
|
lineStyle: {
|
||||||
|
color: 'white' // x轴线的颜色为白色
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// x轴刻度标签的字体大小为8,颜色为蓝色
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 8,
|
||||||
|
color: '#2094CA',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
yAxis: {
|
||||||
|
type: 'value', // y轴的类型为数值型,即显示的是连续的数据点
|
||||||
|
// y轴线显示,并且线的颜色为白色
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// y轴的分割线显示,分割线的颜色为半透明的白色
|
||||||
|
splitLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: 'rgba(255,255,255,0.3)'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// y轴刻度标签的字体大小为8,颜色为蓝色
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 8,
|
||||||
|
color: '#2094CA',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: '销售额', // 图表的名称
|
||||||
|
type: 'bar', // 图表类型为柱状图
|
||||||
|
barWidth: '15%', // 柱子的宽度为图表宽度的15%
|
||||||
|
label: {show: false}, // 不显示柱子上的标签
|
||||||
|
// 柱子的颜色使用渐变色,从上到下由黄色(#fccb05)渐变为橙色(#f5804d),并且柱子的边框圆角半径为12
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#fccb05'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: '#f5804d'
|
||||||
|
}]),
|
||||||
|
barBorderRadius: 12,
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
data: sales, // 柱状图的数据
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '利润', // 图表的名称
|
||||||
|
type: 'bar', // 图表类型为柱状图
|
||||||
|
barWidth: '15%', // 柱子的宽度为图表宽度的15%
|
||||||
|
label: {show: false}, // 不显示柱子上的标签
|
||||||
|
// 柱子的颜色使用渐变色,从上到下由绿色(#8bd46e)渐变为深蓝色(#09bcb7),并且柱子的边框圆角半径为11个单位
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#8bd46e'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: '#09bcb7'
|
||||||
|
}]),
|
||||||
|
barBorderRadius: 11,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: profit, // 柱状图的数据
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
// 这段代码的作用是在 ECharts 图表中每隔 2 秒自动切换高亮的图形,并显示相应的提示框。
|
||||||
|
var currentIndex = -1;
|
||||||
|
setInterval(function () {
|
||||||
|
var dataLen = option.series[0].data.length;
|
||||||
|
// 取消之前高亮的图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'downplay',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
currentIndex = (currentIndex + 1) % dataLen;
|
||||||
|
// 高亮当前图形
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'highlight',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
// 显示 tooltip
|
||||||
|
myChart.dispatchAction({
|
||||||
|
type: 'showTip',
|
||||||
|
seriesIndex: 0,
|
||||||
|
dataIndex: currentIndex
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
myChart.setOption(option);
|
||||||
|
|
||||||
|
})
|
||||||
36
experiment_5/task4/js/test.html
Normal file
36
experiment_5/task4/js/test.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
|
||||||
|
<script src="d3.min.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
d3.csv("../data/sales_month.csv", function (error, data) {
|
||||||
|
console.log(data);
|
||||||
|
var month = [];
|
||||||
|
var sales = [];
|
||||||
|
var profit = [];
|
||||||
|
for (i = 0; i < data.length; i++){
|
||||||
|
month.push(data[i].month);
|
||||||
|
sales.push(Math.round(data[i].sales / 100) / 100);
|
||||||
|
profit.push(Math.round(data[i].profit / 100) / 100);
|
||||||
|
}
|
||||||
|
console.log("---month---")
|
||||||
|
console.log(month)
|
||||||
|
console.log("---sales---")
|
||||||
|
console.log(sales)
|
||||||
|
console.log("---profit---")
|
||||||
|
console.log(profit)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user