refactor(experiment_5):重构实验 5 数据格式和图表展示

- 移除 iris.csv 和 marketing.sql 文件
- 新增 sales_manager.csv 和 sales_month.csv 文件
- 添加 sales_manager.js 文件,实现销售数据的图表展示
This commit is contained in:
2025-04-29 13:55:32 +08:00
parent 1984d69e6d
commit 2f39064475
14 changed files with 1122 additions and 334 deletions

View File

@@ -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 Id PetalLength PetalWidth SepalLength SepalWidth Species
2 1 5.1 3.5 1.4 0.2 setosa
3 2 4.9 3 1.4 0.2 setosa
4 3 4.7 3.2 1.3 0.2 setosa
5 4 4.6 3.1 1.5 0.2 setosa
6 5 5 3.6 1.4 0.2 setosa
7 6 5.4 3.9 1.7 0.4 setosa
8 7 4.6 3.4 1.4 0.3 setosa
9 8 5 3.4 1.5 0.2 setosa
10 9 4.4 2.9 1.4 0.2 setosa
11 10 4.9 3.1 1.5 0.1 setosa
12 11 5.4 3.7 1.5 0.2 setosa
13 12 4.8 3.4 1.6 0.2 setosa
14 13 4.8 3 1.4 0.1 setosa
15 14 4.3 3 1.1 0.1 setosa
16 15 5.8 4 1.2 0.2 setosa
17 16 5.7 4.4 1.5 0.4 setosa
18 17 5.4 3.9 1.3 0.4 setosa
19 18 5.1 3.5 1.4 0.3 setosa
20 19 5.7 3.8 1.7 0.3 setosa
21 20 5.1 3.8 1.5 0.3 setosa
22 21 5.4 3.4 1.7 0.2 setosa
23 22 5.1 3.7 1.5 0.4 setosa
24 23 4.6 3.6 1 0.2 setosa
25 24 5.1 3.3 1.7 0.5 setosa
26 25 4.8 3.4 1.9 0.2 setosa
27 26 5 3 1.6 0.2 setosa
28 27 5 3.4 1.6 0.4 setosa
29 28 5.2 3.5 1.5 0.2 setosa
30 29 5.2 3.4 1.4 0.2 setosa
31 30 4.7 3.2 1.6 0.2 setosa
32 31 4.8 3.1 1.6 0.2 setosa
33 32 5.4 3.4 1.5 0.4 setosa
34 33 5.2 4.1 1.5 0.1 setosa
35 34 5.5 4.2 1.4 0.2 setosa
36 35 4.9 3.1 1.5 0.2 setosa
37 36 5 3.2 1.2 0.2 setosa
38 37 5.5 3.5 1.3 0.2 setosa
39 38 4.9 3.6 1.4 0.1 setosa
40 39 4.4 3 1.3 0.2 setosa
41 40 5.1 3.4 1.5 0.2 setosa
42 41 5 3.5 1.3 0.3 setosa
43 42 4.5 2.3 1.3 0.3 setosa
44 43 4.4 3.2 1.3 0.2 setosa
45 44 5 3.5 1.6 0.6 setosa
46 45 5.1 3.8 1.9 0.4 setosa
47 46 4.8 3 1.4 0.3 setosa
48 47 5.1 3.8 1.6 0.2 setosa
49 48 4.6 3.2 1.4 0.2 setosa
50 49 5.3 3.7 1.5 0.2 setosa
51 50 5 3.3 1.4 0.2 setosa
52 51 7 3.2 4.7 1.4 versicolor
53 52 6.4 3.2 4.5 1.5 versicolor
54 53 6.9 3.1 4.9 1.5 versicolor
55 54 5.5 2.3 4 1.3 versicolor
56 55 6.5 2.8 4.6 1.5 versicolor
57 56 5.7 2.8 4.5 1.3 versicolor
58 57 6.3 3.3 4.7 1.6 versicolor
59 58 4.9 2.4 3.3 1 versicolor
60 59 6.6 2.9 4.6 1.3 versicolor
61 60 5.2 2.7 3.9 1.4 versicolor
62 61 5 2 3.5 1 versicolor
63 62 5.9 3 4.2 1.5 versicolor
64 63 6 2.2 4 1 versicolor
65 64 6.1 2.9 4.7 1.4 versicolor
66 65 5.6 2.9 3.6 1.3 versicolor
67 66 6.7 3.1 4.4 1.4 versicolor
68 67 5.6 3 4.5 1.5 versicolor
69 68 5.8 2.7 4.1 1 versicolor
70 69 6.2 2.2 4.5 1.5 versicolor
71 70 5.6 2.5 3.9 1.1 versicolor
72 71 5.9 3.2 4.8 1.8 versicolor
73 72 6.1 2.8 4 1.3 versicolor
74 73 6.3 2.5 4.9 1.5 versicolor
75 74 6.1 2.8 4.7 1.2 versicolor
76 75 6.4 2.9 4.3 1.3 versicolor
77 76 6.6 3 4.4 1.4 versicolor
78 77 6.8 2.8 4.8 1.4 versicolor
79 78 6.7 3 5 1.7 versicolor
80 79 6 2.9 4.5 1.5 versicolor
81 80 5.7 2.6 3.5 1 versicolor
82 81 5.5 2.4 3.8 1.1 versicolor
83 82 5.5 2.4 3.7 1 versicolor
84 83 5.8 2.7 3.9 1.2 versicolor
85 84 6 2.7 5.1 1.6 versicolor
86 85 5.4 3 4.5 1.5 versicolor
87 86 6 3.4 4.5 1.6 versicolor
88 87 6.7 3.1 4.7 1.5 versicolor
89 88 6.3 2.3 4.4 1.3 versicolor
90 89 5.6 3 4.1 1.3 versicolor
91 90 5.5 2.5 4 1.3 versicolor
92 91 5.5 2.6 4.4 1.2 versicolor
93 92 6.1 3 4.6 1.4 versicolor
94 93 5.8 2.6 4 1.2 versicolor
95 94 5 2.3 3.3 1 versicolor
96 95 5.6 2.7 4.2 1.3 versicolor
97 96 5.7 3 4.2 1.2 versicolor
98 97 5.7 2.9 4.2 1.3 versicolor
99 98 6.2 2.9 4.3 1.3 versicolor
100 99 5.1 2.5 3 1.1 versicolor
101 100 5.7 2.8 4.1 1.3 versicolor
102 101 6.3 3.3 6 2.5 virginica
103 102 5.8 2.7 5.1 1.9 virginica
104 103 7.1 3 5.9 2.1 virginica
105 104 6.3 2.9 5.6 1.8 virginica
106 105 6.5 3 5.8 2.2 virginica
107 106 7.6 3 6.6 2.1 virginica
108 107 4.9 2.5 4.5 1.7 virginica
109 108 7.3 2.9 6.3 1.8 virginica
110 109 6.7 2.5 5.8 1.8 virginica
111 110 7.2 3.6 6.1 2.5 virginica
112 111 6.5 3.2 5.1 2 virginica
113 112 6.4 2.7 5.3 1.9 virginica
114 113 6.8 3 5.5 2.1 virginica
115 114 5.7 2.5 5 2 virginica
116 115 5.8 2.8 5.1 2.4 virginica
117 116 6.4 3.2 5.3 2.3 virginica
118 117 6.5 3 5.5 1.8 virginica
119 118 7.7 3.8 6.7 2.2 virginica
120 119 7.7 2.6 6.9 2.3 virginica
121 120 6 2.2 5 1.5 virginica
122 121 6.9 3.2 5.7 2.3 virginica
123 122 5.6 2.8 4.9 2 virginica
124 123 7.7 2.8 6.7 2 virginica
125 124 6.3 2.7 4.9 1.8 virginica
126 125 6.7 3.3 5.7 2.1 virginica
127 126 7.2 3.2 6 1.8 virginica
128 127 6.2 2.8 4.8 1.8 virginica
129 128 6.1 3 4.9 1.8 virginica
130 129 6.4 2.8 5.6 2.1 virginica
131 130 7.2 3 5.8 1.6 virginica
132 131 7.4 2.8 6.1 1.9 virginica
133 132 7.9 3.8 6.4 2 virginica
134 133 6.4 2.8 5.6 2.2 virginica
135 134 6.3 2.8 5.1 1.5 virginica
136 135 6.1 2.6 5.6 1.4 virginica
137 136 7.7 3 6.1 2.3 virginica
138 137 6.3 3.4 5.6 2.4 virginica
139 138 6.4 3.1 5.5 1.8 virginica
140 139 6 3 4.8 1.8 virginica
141 140 6.9 3.1 5.4 2.1 virginica
142 141 6.7 3.1 5.6 2.4 virginica
143 142 6.9 3.1 5.1 2.3 virginica
144 143 5.8 2.7 5.1 1.9 virginica
145 144 6.8 3.2 5.9 2.3 virginica
146 145 6.7 3.3 5.7 2.5 virginica
147 146 6.7 3 5.2 2.3 virginica
148 147 6.3 2.5 5 1.9 virginica
149 148 6.5 3 5.2 2 virginica
150 149 6.2 3.4 5.4 2.3 virginica
151 150 5.9 3 5.1 1.8 virginica

View File

@@ -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;

View 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
1 sales_manager sales profit
2 郝杰 502667.277 55300.637
3 江奕健 179421.48 11725
4 姜伟 222300.092 19919.872
5 王倩倩 691845.854 92687.014
6 杨洪光 761143.054 96180.574
7 张怡莲 558296.522 93976.162

View 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
1 month sales profit
2 1月 226678.83 37233.77
3 2月 109855.158 19834.458
4 3月 167173.727 18748.247
5 4月 96984.692 16501.352
6 5月 232199.107 23984.947
7 6月 339729.698 39157.118
8 7月 140050.918 11800.698
9 8月 356128.507 66818.087
10 9月 322759.367 24133.207
11 10月 289269.169 33635.329
12 11月 342142.15 42611.87
13 12月 292702.956 35330.176

View 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
}]
}]

View 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
1 province sales profit
2 安徽 113742.734 32222.834
3 北京 76154.54 19854.24
4 福建 102315.08 32774.7
5 甘肃 47267.444 -13210.036
6 广东 254769.725 58887.605
7 广西 48349.532 14036.932
8 贵州 15893.136 287.616
9 海南 10995.88 4132.94
10 河北 227145.8 43675.38
11 河南 79220.54 17722.6
12 黑龙江 273877.632 66982.132
13 湖北 135006.9 -33492.34
14 湖南 163503.277 31399.277
15 吉林 76539.617 17712.317
16 江苏 128183.776 -16801.764
17 江西 29987.86 7944.72
18 辽宁 152250.028 -29393.812
19 内蒙古 59787.252 -15047.368
20 宁夏 12685.988 -900.592
21 山东 192400.46 49812.56
22 山西 99782.9 25386.9
23 陕西 102767.168 21152.628
24 上海 99893.584 17668.784
25 四川 60567.584 -9514.876
26 天津 95426.03 20107.01
27 西藏 1144.92 400.26
28 新疆 16700.88 4683
29 云南 79432.052 16937.032
30 浙江 94619.56 -27441.26
31 重庆 65262.4 11809.84

View 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
1 region sales profit
2 东北 502667.277 55300.637
3 华北 558296.522 93976.162
4 华东 761143.054 96180.574
5 西北 179421.48 11725
6 西南 222300.092 19919.872
7 中南 691845.854 92687.014

View 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);
})

View 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);
})

View 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)
})

View 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年全国销售额共&nbsp;<b style='color:#E78932;font-size:24px'>" + sales_total + "&nbsp;</b>万元"
})

View 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);
})

View 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>