# 调用代码编写需要用到的库
from pyecharts import options as opts
from pyecharts.charts import Geo, Timeline, Page, Line, Bar
from pyecharts.globals import ChartType, SymbolType
import pandas as pd
import csv
from pyecharts.faker import Faker
import json
from pyecharts.charts import BMap
import requests
# 接口地址
url = "https://api.map.baidu.com/geoconv/v1/"
# 此处填写你在控制台-应用管理-创建应用后获取的AK
ak = "qckTFxe56ybqKsfzelXgW9RSFtLaFQ2c"
# 为地图显示加上时间轴
tl = Timeline()
t2 = Timeline()
t3 = Timeline()
# 为折线图显示加上时间轴
t4 = Timeline()
# 文件路径
save_path = '15_48_01.csv'
# 读取CSV文件
df = pd.read_csv(save_path)
# 获取行数
count = len(df)
# 读取日期数据
day_a = df.iloc[1, 2]
day_b = df.iloc[25, 2]
day_c = df.iloc[49, 2]
# 读取第一天数据
ax = df.iloc[0:23, 0]
ay1 = df.iloc[0:23, 5]
ay2 = df.iloc[0:23, 6]
ay3 = df.iloc[0:23, 7]
# 读取第二天数据
bx = df.iloc[24:47, 0]
by1 = df.iloc[24:47, 5]
by2 = df.iloc[24:47, 6]
by3 = df.iloc[24:47, 7]
# 读取第三天数据
cx = df.iloc[48:71, 0]
cy1 = df.iloc[48:71, 5]
cy2 = df.iloc[48:71, 6]
cy3 = df.iloc[48:71, 7]
latitude_1 = 0
longitude_1 = 0
latitude_2 = 0
longitude_2 = 0
latitude_3 = 0
longitude_3 = 0
#################### 文件读取函数 ####################
def read_csv_data(row_num, col_num):
with open(save_path, 'r') as csvfile:
reader = csv.reader(csvfile)
data = list(reader)
return data[row_num][col_num]
#################### 数据折线图绘制 ####################
for i in range(1, 4):
if i == 1:
a=(
Line()
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(type_="category"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add_xaxis(xaxis_data=ax) # x轴数据传递
.add_yaxis(
series_name="PM2.5", # 图例名称
y_axis=ay1, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="PM10", # 图例名称
y_axis=ay2, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="CO", # 图例名称
y_axis=ay3, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
# .set_colors(['red', 'green', 'blue'])
)
elif i == 2:
b=(
Line()
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(type_="category"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add_xaxis(xaxis_data=bx) # x轴数据传递
.add_yaxis(
series_name="PM2.5", # 图例名称
y_axis=by1, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="PM10", # 图例名称
y_axis=by2, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="CO", # 图例名称
y_axis=by3, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
# .set_colors(['red', 'green', 'blue'])
)
else:
c=(
Line()
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(type_="category"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add_xaxis(xaxis_data=cx) # x轴数据传递
.add_yaxis(
series_name="PM2.5", # 图例名称
y_axis=cy1, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="PM10", # 图例名称
y_axis=cy2, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="CO", # 图例名称
y_axis=cy3, # y轴数据传递
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
# .set_colors(['red', 'green', 'blue'])
)
if i == 1:
z = a
sck = day_a
elif i == 2:
z =b
sck = day_b
else:
z = c
sck = day_c
t4.add(z,"{}".format(sck))
for i in range(48, 72):
####################设备1的地理位置########################
global latitude_1,longitude_1,latitude_2,longitude_2,latitude_3,longitude_3
weidu_value_1=read_csv_data(i,3)
jingdu_value_1=read_csv_data(i,4)
judgment_weidu_value_1 = int(eval(weidu_value_1))
judgment_jingdu_value_1 = int(eval(jingdu_value_1))
# 判断经纬度不为0
if judgment_weidu_value_1 != 0 and judgment_jingdu_value_1 != 0:
#取纬度中间有用数据
weidu_value_1 = str(weidu_value_1)
weidu_data_float_1 = weidu_value_1[2:]
weidu_data_int_1 = weidu_value_1[:2]
latitude_1 = eval(weidu_data_int_1)+(eval(weidu_data_float_1)/60)
#取经度中间有用数据
jingdu_value_1 = str(jingdu_value_1)
jingdu_data_float_1 = jingdu_value_1[3:]
jingdu_data_int_1 = jingdu_value_1[:3]
#经度数值转换
longitude_1 = eval(jingdu_data_int_1)+(eval(jingdu_data_float_1)/60)
####################设备2的地理位置########################
weidu_value_2=read_csv_data(i,8)
jingdu_value_2=read_csv_data(i,9)
judgment_weidu_value_2 = int(eval(weidu_value_2))
judgment_jingdu_value_2 = int(eval(jingdu_value_2))
# 判断经纬度不为0
if judgment_weidu_value_2 != 0 and judgment_jingdu_value_2 != 0:
#取纬度中间有用数据
weidu_data_float_2 = weidu_value_2[2:]
weidu_data_int_2 = weidu_value_2[:2]
#纬度数值转换
latitude_2 = eval(weidu_data_int_2)+(eval(weidu_data_float_2)/60)
#取经度中间有用数据
jingdu_data_float_2 = jingdu_value_2[3:]
jingdu_data_int_2 = jingdu_value_2[:3]
#经度数�