def drawGeoMap(self, aStuData): sno, sname = aStuData['info'].split(SPLIT_CHAR) sdata = aStuData['data'] try: geo = Geo() def add_data(date, location): # print(location) try: longitude, latitude, address = location except: longitude, latitude, address = DEFAULT_Location geo.add_coordinate(date, longitude, latitude) geo.add(date, [(date, address)], type_=ChartType.EFFECT_SCATTER) geo.add_schema(maptype="china") # add data for date, data in sdata.items(): add_data(date, data) title = f'{sno} {sname} 位置动态' geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(legend_opts=opts.LegendOpts(orient='vertical', pos_left='left', pos_top='10%'), title_opts=opts.TitleOpts(title=title)) html_path = ospath_join(self.mapsDir, f'{sno}_{sname}.html') geo.render(html_path) except Exception as e: log.error(f'地图生成失败: {sno} {sname} - 可能是包含了文件名不可用的特殊字符', exc_info=True) self._signal.emit(f'错误:{sno} {sname} 地图生成失败!可能原因:工号或提交人姓名中包含文件名不可用的特殊字符,如:*。请修改后重试!')
def create_city_map(df): df1 = df[df["country"] == "中国"] df1 = df1.copy() df1["city"] = df1["city"].str.replace("市", "") df_num = df1.groupby("city")["city"].agg( count="count").reset_index().sort_values(by="count", ascending=False) df_city = df_num["city"].values.tolist() df_count = df_num["count"].values.tolist() # 初始化配置 geo = Geo(init_opts=opts.InitOpts(width="800px", height="400px")) # 中国地图 geo.add("", [list(z) for z in zip(df_city, df_count)], "china") # 设置全局配置项,标题、工具箱(下载图片)、颜色图例 geo.set_global_opts( title_opts=opts.TitleOpts(title="抖音大V城市分布情况", pos_left="center", pos_top="0"), toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}), # 设置数值范围0-600,is_piecewise标签值连续 visualmap_opts=opts.VisualMapOpts(is_piecewise=True)) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) map.render("抖音大V城市分布情况.html")
def generate_drug_map(date, type='疫苗'): data = fetch_drug_date(date, type) points = [] for country, num in data: poins.append('1', random.sample(random_points[country], num)) count = [1] * len(data) addresses = [] json_data = {} for address in test_data: json_data[address[0]] = [address[1], address[2]] addresses.append(address[0]) json_str = json.dumps(json_data, ensure_ascii=False, indent=4) with open('test_data.json', 'w', encoding='utf-8') as json_file: json_file.write(json_str) geo = Geo() geo.add_schema(maptype='world') geo.add_coordinate_json(json_file='test_data.json') geo.add('研发中的{}类药物'.format(type), [list(z) for z in zip(addresses, data)], type_=ChartType.EFFECT_SCATTER, color='#1e90ff', symbol_size=10, symbol='diamond') geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False), effect_opts=opts.EffectOpts(scale=5)) geo.set_global_opts(title_opts=opts.TitleOpts(title="Geo-EffectScatter"), tooltip_opts=opts.TooltipOpts(is_show=False)) geo.render(path='3.html')
def get_salary_city(self): sql = """ select city,cast(sum((max_salary+min_salary)/2)/count(*) as signed) salary from lagou_job GROUP BY city order by salary desc """ cursor.execute(sql) key = [] values = [] for info in cursor.fetchall(): if not info[0] == '海外': key.append(info[0]) values.append(info[1]) max = values[0] geo = Geo(init_opts=opts.InitOpts(width="1600px", height="1000px")) geo.add_schema( maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#DDF8FF", border_color="#111"), ) geo.add("薪资水平", [list(z) for z in zip(key, values)], type_="effectScatter") geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=max), title_opts=opts.TitleOpts(title="各城市工资水平,单位K")) file = data_store + "\\" + "salary.html" check_path(file) geo.render(file)
def geo(): g = Geo(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION)) g.add_schema(maptype='广州') # 定义坐标对应的名称,添加到坐标库中 add_coordinate(name, lng, lat) names = list(df['店铺名称']) lng = list(df['经度']) lat = list(df['纬度']) for i in range(len(names)): g.add_coordinate(names[i], lng[i], lat[i]) # 定义数据对, data_pair = [(name, 50) for name in names] # 将数据添加到地图上 g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=3) # 设置样式 g.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) g.set_global_opts( visualmap_opts=opts.VisualMapOpts(is_show=False), title_opts=opts.TitleOpts(title="广州美食分布"), ) g.render('广州美食分布.html') return g
def task(): city = '北京' g = Geo(init_opts=opts.InitOpts(width = '1600px', height='800px')) g.add_schema(maptype=city) # 数据库连接 db = pymysql.connect(host = 'localhost', user='******', password='******', port=3306, db = 'educationalResource_bj') cursor = db.cursor() sql = 'select * from educationalResourceMap' cursor.execute(sql) results = cursor.fetchall() db.close() #print(results[0][1]) for result in results: g.add_coordinate(result[1], result[6], result[7]) data_pair = [] for result in results: judge = 0 if result[3] == 'gbyey': judge = 10 elif result[3] == 'xx': judge = 20 elif result[3] == 'zx': judge = 30 elif result[3] == 'zyjyxx': judge = 50 elif result[3] == 'gdyx': judge = 80 else : judge = 101 data_pair.append((result[1], judge)) #print(data_pair) # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用 # from pyecharts.globals import GeoType # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES # 将数据添加到地图上 g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=5) # 设置样式 g.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 自定义分段 color 可以用取色器取色 pieces = [ {'min': 1, 'max': 10, 'label': '幼儿园', 'color': '#3700A4'}, {'min': 10, 'max': 20, 'label': '小学', 'color': '#81AE9F'}, {'min': 20, 'max': 30, 'label': '中学', 'color': '#E2C568'}, {'min': 30, 'max': 50, 'label': '职业技术学校', 'color': '#FCF84D'}, {'min': 50, 'max': 100, 'label': '高等院校', 'color': '#DD0200'}, {'min': 100, 'max': 200, 'label': '特殊教育学校', 'color': '#DD675E'}, ] # is_piecewise 是否自定义分段, 变为true 才能生效 g.set_global_opts( visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces), title_opts=opts.TitleOpts(title="{}-学校分布".format(city)), ) return g
def func3(path="temp.csv"): win = tkinter.Tk() x = win.winfo_screenwidth() y = win.winfo_screenheight() pieces = [ { 'min': 0, 'max': 0, 'label': '数据无效', 'color': '#00B2EE' }, { 'min': 1, 'max': 1, 'label': '数据疑似为假', 'color': '#71C671' }, { 'min': 2, 'max': 2, 'label': '数据疑似为真', 'color': '#CD4F39' }, ] data = pd.read_csv(path) # 读取数据 geo_sight_coord = data[['dx', 'dy']] # 构造位置字典数据 # data_pair = [(str(i), 1) for i in range(len(geo_sight_coord))] # 构造项目租金数据 data_pair = [] for index, row in data.iterrows(): data_pair.append((str(index), int(row['flag_legal']))) g = Geo(init_opts=opts.InitOpts( page_title="车辆轨迹", width=str(x / 1.1) + 'px', height=str(y / 1.1) + 'px', )) # 地理初始化 g.add_schema(maptype="江西") # 限定上海市范围 for key, value in geo_sight_coord.iterrows(): # 对地理点循环 g.add_coordinate(str(key), value['dx'], value['dy']) # 追加点位置 g.add("", data_pair, symbol_size=4) # 追加项目名称和租金 g.set_series_opts( label_opts=opts.LabelOpts(is_show=False), type='scatter', ) # 星散点图scatter g.set_global_opts(visualmap_opts=opts.VisualMapOpts( is_piecewise=True, pieces=pieces, pos_left='left', pos_bottom="100px", ), title_opts=opts.TitleOpts(title="车辆轨迹")) g.render(path="车辆加油地图.html")
def geo_base(data): city_list, province_list = data # 好友全国省份分布图 geo = Geo(init_opts=opts.InitOpts(theme="vintage")) for city in city_list: try: geo.add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="gray")) geo.add("微信好友分布地图", [city], type_="effectScatter", symbol_size=10) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="微信好友分布地图"), ) except: pass print("正在制作好友全国分布图") make_snapshot(driver, geo.render(), "geo.png") # 广东好友热力图 # geo = Geo(init_opts=opts.InitOpts(theme="vintage")) # for city in city_list: # try: # geo.add_schema(maptype="广东", itemstyle_opts=opts.ItemStyleOpts(color="gray")) # geo.add("广东好友热力图", [city], type_="heatmap", symbol_size=10) # geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="热力图"), # toolbox_opts=opts.ToolboxOpts()) # except: # pass # # print("正在制作好友广东热力图") # make_snapshot(driver, geo.render(), "heat.png") # 好友全国地理图 maps = Map() maps.add("", province_list, "china") maps.set_global_opts(title_opts=opts.TitleOpts(title="微信好友分布图"), visualmap_opts=opts.VisualMapOpts()) print("正在制作好友地理图") make_snapshot(driver, geo.render(), "map.png") # 词云图 c = (WordCloud().add("", city_list, word_size_range=[15, 50], shape="diamond", word_gap=10).set_global_opts( title_opts=opts.TitleOpts(title="diamond"))) print("正在制作好友城市词云图") make_snapshot(driver, c.render(), "world.png")
def locate_on_map(addr, longtitude, latitude): g = Geo().add_schema(maptype="上海") g.add_coordinate(addr, longtitude, latitude) data_pair = [(addr, 1)] g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=20) g.set_series_opts(label_opts=options.LabelOpts(is_show=False)) g.set_global_opts(title_opts=options.TitleOpts(title="地图标点测试")) g.render_notebook() print("process finished")
def quakes(): # 对地震数据进行绘图 quakes_data = pd.read_csv("quakes.csv") latitude = quakes_data['lat'].values longitude = quakes_data['long'].values mag = quakes_data['mag'].values index = list(range(len(mag))) #可视化 geo = Geo() geo.add_schema(maptype='world') for i in range(len(index)): geo.add_coordinate(index[i], longitude[i], latitude[i]) data_pair = [list(z) for z in zip(index, mag)] # 将数据添加进图中 geo.add('震源', data_pair, symbol_size=3) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 设置显示区间 pieces = [ { 'max': 4, 'label': '4级以下', 'color': '#50A3BA' }, { 'min': 4, 'max': 5, 'label': '4-5级', 'color': '#E2C568' }, { 'min': 5, 'max': 6, 'label': '5-6级', 'color': '#D94E5D' }, { 'min': 6, 'max': 7, 'label': '6-7级', 'color': '#3700A4' }, { 'min': 7, 'label': '7级以上', 'color': '#81AE9F' }, ] geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces), title_opts=opts.TitleOpts(title="震源分布")) #导出图像 geo.render('地震地点分布.html')
def out_data(date_number): city_list = ('南宁市', '柳州市', '桂林市', '梧州市', '北海市', '防城港市', '钦州市', '贵港市', '玉林市', '百色市', '贺州市', '河池市', '来宾市', '崇左市') city_od_list_pro = [] city_od_values_pro = [] for i in city_list: city = i workbook = xlrd.open_workbook(f'.\\{path}\\{city}-迁入来源地规模指数.xlsx') sheet = workbook.sheet_by_index(0) city_od_list = [] city_od_values = [] a = 0 cols = sheet.col_values(1)[1:] cols_date = sheet.col_values(date_number + 1)[1:] for j in cols: city_od = (city, j) city_od_v = (j, cols_date[a]) city_od_list.append(city_od) city_od_values.append(city_od_v) a += 1 city_od_list_pro.append(city_od_list) city_od_values_pro.append(city_od_values) od_list = [] os_values = [] for i in range(14): for j in range(14): od_list.append(city_od_list_pro[i][j]) os_values.append(city_od_values_pro[i][j]) # print(od_list) # print(os_values) geo = Geo() # 地图类型,世界地图可换为world geo.add_schema(maptype="广西") # 添加数据点 geo.add("%", os_values, type_=ChartType.EFFECT_SCATTER) # 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', # 'diamond', 'pin', 'arrow', 'none' geo.add("迁出城市", od_list, type_=ChartType.LINES, effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=5, color="yellow"), linestyle_opts=opts.LineStyleOpts(curve=0.2), is_large=True) # 不显示标签 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 设置图标标题,visualmap_opts=opts.VisualMapOpts()为左下角的视觉映射配置项 geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="广西地市迁徙数据")) # 直接在notebook里显示图表 geo.render_notebook() # 生成html文件,可传入位置参数 geo.render(f".\\out_od\\广西-2020.10.{date_number}迁出OD图.html")
def base_info(): geo = Geo() geo.add_schema(maptype="河南") # 加入自定义的点,格式为 # 地图形式 type_=ChartType.HEATMAP geo.add("geo", data, type_=ChartType.EFFECT_SCATTER) # is_show:是否显示经纬度 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=10), title_opts=opts.TitleOpts(title="Geo-河南省地图")) return geo
def drawGeoMap(excel_path, mtype='china'): data = xlrd.open_workbook(excel_path) table = data.sheet_by_index(0) nrow = table.nrows dates = table.row_values(0) # print(dates) allData = {} for i in range(1, nrow): aNameData = {} sname = f"{table.cell(i,0).value} {table.cell(i,1).value}" for j in range(2, len(dates)): value = table.cell(i,j).value try: value = json.loads(value) value = value[1:4] except Exception as e: print(f"error: {e}") pass aNameData[dates[j]] = value allData[sname] = aNameData # print(f'学生数:{len(allData)}') title = '2021年1月21日能仔位置' geo = Geo(init_opts=opts.InitOpts(width='1000px', height='580px', page_title=title, theme=ThemeType.LIGHT)) geo.add_schema(maptype=mtype) for name, data in allData.items(): for date, location in data.items(): aNameLocation = [] try: longitude, latitude, address = location except Exception as e: print(f"Error: {e}") longitude, latitude, address = DEFAULT_Location # aNameLocation.append(('%s %s\n' % (name, date), address)) # geo.add_coordinate('%s %s' % (name, date), longitude, latitude) sno, sname = name.split(' ') # print(sno, sname) aNameLocation.append(('%s %s' % (sno, sname), date)) geo.add_coordinate('%s %s' % (sno, sname), longitude, latitude) geo.add(name, aNameLocation, type_=ChartType.EFFECT_SCATTER) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(legend_opts=opts.LegendOpts(type_='scroll', orient='vertical', pos_left='left', pos_top='10%', is_show=False), title_opts=opts.TitleOpts(title=title)) map_path = os.path.join(dir_path, '2021年1月21日能仔位置地图.html') geo.render(map_path) # os.system(f'"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" {os.path.abspath(map_path)}') print('done.')
def base_info(): print(data) geo = Geo() geo.add_schema(maptype="china") # 加入自定义的点,格式为 # geo.add_coordinate("自定义点", 80.39770014211535,39.90779994986951) # 地图形式 type_=ChartType.HEATMAP geo.add("geo", data, type_=ChartType.EFFECT_SCATTER) # is_show:是否显示经纬度 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-基本示例")) return geo
def base_info(): geo = Geo() geo.width = "1440px" geo.height = "680px" geo.add_schema(maptype="china") geo.add("确诊人数", confirmed, type_=ChartType.EFFECT_SCATTER) geo.add("疑似人数", suspect, type_=ChartType.EFFECT_SCATTER) geo.add("死亡人数", dead, type_=ChartType.EFFECT_SCATTER) geo.add("治愈人数", healed, type_=ChartType.EFFECT_SCATTER) geo.set_series_opts( label_opts=opts.LabelOpts(is_show=False, background_color='#61a0a8')) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts( title="中国ncov-2019疫情动态\n上一次数据更新时间:\n" + time)) return geo
def insert_loc(): g = Geo() data_pair = [] g.add_schema(maptype='china') airport_df = pd.read_excel('CN_airport_info.xlsx', usecols='B,D,E,F,S') for i in range(len(airport_df)): g.add_coordinate(airport_df.iloc[i, 1], float(airport_df.iloc[i, 3]), float(airport_df.iloc[i, 2])) data_pair.append((airport_df.iloc[i, 1], int(airport_df.iloc[i, 4]))) g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=7) g.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) g.set_global_opts( visualmap_opts=opts.VisualMapOpts(is_piecewise=False), title_opts=opts.TitleOpts(title="全国机场分布图"), ) return g
def plot_geolines(plotting_data, geo_cities_coords): c = Geo(init_opts=opts.InitOpts(width='1500px', height='700px')) c.add_schema( maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#F0CA00", border_color="#111")) # 所有坐标点加进地图 for i in range(0, len(geo_cities_coords)): c.add_coordinate(list(geo_cities_coords.keys())[i], list(geo_cities_coords.values())[i][0], list(geo_cities_coords.values())[i][1]) c.add('仓网结构', plotting_data, type_=GeoType.LINES, linestyle_opts=opts.LineStyleOpts(width=1), label_opts=opts.LabelOpts(is_show=False), ##trail_length=0, is_polyline=True) c.set_global_opts(title_opts=opts.TitleOpts(title="仓网结构")) c.render('二级仓网结构.html')
def draw_with_echarts_scatter(): '''使用pyecharts画散点图''' try: device_csv_dir = r'E:/test_opencv/车辆经常停留位置/all_device_data_csv/' pyecharts_device_html_dir = r'E:/test_opencv/车辆经常停留位置/pyecharts_device_html/' if not os.path.exists(device_csv_dir): os.makedirs(device_csv_dir) if not os.path.exists(pyecharts_device_html_dir): os.makedirs(pyecharts_device_html_dir) for item in os.listdir(device_csv_dir): csvlName = device_csv_dir + item df = pd.read_csv(csvlName, encoding='utf-8', low_memory=False) # X = df.drop_duplicates(subset=['longitude', 'latitude']) X = df device_id = X['device_id'].iloc[0] # 取组内第一个device_id用于存csv用 staff_id = X['staff_id'].iloc[0] # 取组内第一个staff_id用于存csv用 staff_name = X['staff_name'].iloc[0] # 取组内第一个staff_name用于存csv用 car_id = X['car_id'].iloc[0] # 取组内第一个car_id用于存csv用 car_num = X['car_num'].iloc[0] # 取组内第一个car_num用于存csv用 create_time_1 = X['create_time_1'].iloc[0] # 取组内第一个create_time_1用于存csv用 g = Geo() g.add_schema(maptype="china") # 给所有点附上标签 'create_time' for index, row in X.iterrows(): g.add_coordinate(row['create_time'], row['remain_longitude'], row['remain_latitude']) create_time = X.create_time.values.tolist() # 给每个点的值赋为 1 data_list = [[item, 1] for item in create_time] # 画图 # g.add('', data_list, type_=GeoType.HEATMAP, symbol_size=2) g.add('', data_list, type_=GeoType.EFFECT_SCATTER, symbol_size=2) g.set_series_opts(label_opts=options.LabelOpts(is_show=False)) #heatmap # g.set_global_opts(visualmap_opts=options.VisualMapOpts(), title_opts=options.TitleOpts(title=staff_name+"_" + str(car_num) + '_' + str(create_time_1) +'_heatmap' ,pos_left='50%',pos_top='20')) #scatter g.set_global_opts(title_opts=options.TitleOpts(title=staff_name+"_" + str(car_num) + '_' + str(create_time_1) +'_scatter' ,pos_left='50%',pos_top='20')) # 保存结果到 html result = g.render(pyecharts_device_html_dir + str(staff_name) + '_' +str(car_num) + '_' + str(create_time_1) + '.html') except Exception as ex: logger.error("Call method draw_with_echarts_scatter() error!") logger.error("Exception:" + str(ex)) raise ex
def geo_base(): city_data = get_data() print(city_data) geo = Geo(init_opts=opts.InitOpts(theme="vintage")) for city in city_data: try: geo.add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="gray")) geo.add("微信好友分布地图", [city], type_="effectScatter", symbol_size=10) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="来自中南海的瓶子"), ) except Exception as e: print(city) pass geo.render("ms_geo.html")
def geo_heatmap(k, v) -> Geo: try: c = Geo() c.add_schema(maptype="china") c.add( "ratio", [list(z) for z in zip(k, v)], type_=ChartType.HEATMAP, ) except TypeError: print("地址有误,开始排错......") with open("place.txt", mode="a") as f: i = 0 c = Geo() c.add_schema(maptype="china") while i < len(k): try: c.add( "ratio", [list(z) for z in zip(k[:i], v[:i])], type_=ChartType.HEATMAP, ) except: print(k[i - 1]) f.writelines(k[i - 1]) f.writelines('\n') del k[i - 1] del v[i - 1] i -= 1 continue else: i += 1 geo_heatmap(k, v) else: c.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) timen = datetime.datetime.now().strftime('%Y-%m-%d') timea = datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S') c.set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="2019nCoV{} BY PZW".format(timen))) Geo.render(c, path='{}HEATMAP.html'.format(timea)) print('渲染完毕')
def get_company_city(self): sql = """ select city,count(distinct url) as company_count from lagou_company GROUP BY city """ result = cursor.execute(sql) key = [] values = [] for info in cursor.fetchall(): if info[0] != '海外' and re.match('[\u4e00-\u9fa5]', info[0]): key.append(info[0]) values.append(info[1]) geo = Geo(init_opts=opts.InitOpts(width="1600px", height="1000px")) geo.add_schema(maptype="china") geo.add("公司分布", [list(z) for z in zip(key, values)], type_="heatmap") geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="各城市公司分布")) file = data_store + "\\" + "company.html" check_path(file) geo.render(file)
def plot(): # 初始化图表信息 geo = Geo(init_opts=opts.InitOpts(width="96vw", height="96vh", page_title="教育网拓扑图", animation_opts=opts.AnimationOpts( animation=False))) # 添加地图 geo.add_schema(maptype="china") # 添加所有点的地理信息 geo.add_coordinate_json("./data/data.json") # 画中间节点 geo.add("Route", [(i, "Route") for i in Nodes_Route], color="Red", point_size=4, symbol_size=4, effect_opts=opts.EffectOpts(is_show=False)) # 画目的节点 geo.add("Dst", [(i, "Dst") for i in Nodes_Dst], color="SeaGreen", point_size=4, symbol_size=4, effect_opts=opts.EffectOpts(is_show=False)) # 画线 展示拓扑信息 geo.add("", list(Trace), type_=ChartType.LINES, effect_opts=opts.EffectOpts(is_show=False, symbol_size=2), linestyle_opts=opts.LineStyleOpts(curve=0.1)) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(title_opts=opts.TitleOpts(title="教育网拓扑图")) # 生成图表到指定文件 geo.render("./dist/render.html")
def plot_geo_heatmap(all_df): """画热力图 Args: all_df (dataframe): 每日数据图 """ def valid_area(x, v): if x.get_coordinate(v) is not None: return 'Y' else: return 'N' c = Geo(init_opts=opts.InitOpts(width='800px', height='600px')) all_df['valid'] = all_df['name'].apply(lambda x: valid_area(c, x)) all_df['plot_v'] = np.log2(all_df['confirm_all'] / 50 + 1) * 10 c.add_schema(maptype="china") c.add( "ratio", all_df.loc[all_df['valid'] == 'Y', ['name', 'plot_v']].values, type_=ChartType.HEATMAP, ) c.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) c.set_global_opts( visualmap_opts=opts.VisualMapOpts(), legend_opts=opts.LegendOpts(is_show=False), title_opts=opts.TitleOpts( pos_left='center', title='2020 Novel coronavirus pneumonia (NCP) ', title_link= 'https://news.qq.com/zt2020/page/feiyan.htm?from=timeline&isappinstalled=0' )) # map_p = Map() # map_p.set_global_opts(title_opts=opts.TitleOpts(title="实时疫情图"), visualmap_opts=opts.VisualMapOpts(max_=100)) # map_p.add("确诊", data, maptype="china") Geo.render(c, path='E:/HEATMAP.html')
def get_geo_base(self, _data): ''' plot geo-HeatMap :param _data: gps对应的城市分布(dataframe) :return: geo城市分布图 ''' register_url(self.echarts_url) geo = Geo(init_opts=opts.InitOpts(width="1000px", height="600px", page_title=self.country, bg_color='')) geo.add_schema(maptype=self.country) for _city, _gps in self.geo_dict.items(): geo.add_coordinate(name=_city, longitude=_gps[0], latitude=_gps[1]) geo.add(series_name=self.series_name, data_pair=_data, type_=ChartType.HEATMAP) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=self.threshold_plot), title_opts=opts.TitleOpts(title="Geo-HeatMap")) return geo
def country_job_num(self): df = pd.read_csv( "D:\PythonFile\LagouSpider\imags\CsvFile\LagouPosition.csv") citys = df.city count = Counter(citys) # count = count.most_common(len(count)) city_list = [] for city in count: city_list.append([city, count[city]]) map = Geo() map.add_schema("china") map.add("geo", city_list, type_=ChartType.EFFECT_SCATTER) map.set_series_opts(label_opts=opt.LabelOpts(is_show=False)) map.set_global_opts( visualmap_opts=opt.VisualMapOpts(), title_opts=opt.TitleOpts(title="Python开发工程师分布情况"), ) map.render( path="D:\PythonFile\LagouSpider\imags\pic/Python开发工程师分布情况.html")
def in_data(city, date_number): workbook = xlrd.open_workbook(f'.\\{path}\\{city}-迁入来源地规模指数.xlsx') sheet = workbook.sheet_by_index(0) city_od_list = [] city_od_values = [] a = 0 cols = sheet.col_values(1)[1:] cols_date = sheet.col_values(date_number + 1)[1:] for j in cols: city_od = (j, city) city_od_v = (j, cols_date[a]) city_od_list.append(city_od) city_od_values.append(city_od_v) a += 1 geo = Geo() # 地图类型,世界地图可换为world geo.add_schema(maptype="广西") # 添加数据点 geo.add("%", city_od_values, type_=ChartType.EFFECT_SCATTER) # 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', # 'diamond', 'pin', 'arrow', 'none' geo.add("迁入城市", city_od_list, type_=ChartType.LINES, effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=5, color="yellow"), linestyle_opts=opts.LineStyleOpts(curve=0.2), is_large=True) # 不显示标签 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 设置图标标题,visualmap_opts=opts.VisualMapOpts()为左下角的视觉映射配置项 geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title=f"{city}迁入数据")) # 直接在notebook里显示图表 geo.render_notebook() # 生成html文件,可传入位置参数 geo.render(f".\\in_od\\{city}-2020.10.{date_number}迁入OD图.html")
def generate_geo_png(geodata, geomax, geomin, geotitle, display_id, map_data_title): from pyecharts import options as opts from pyecharts.charts import Map, Geo from pyecharts.render import make_snapshot # from pyecharts_snapshot.main import make_a_snapshot from snapshot_selenium import snapshot geo = Geo() geo.add_coordinate_json( '/home/CitizenScience/backend/backend/geoCoordJson.js') geo.add_schema(maptype="china") print(geodata) print(map_data_title) geo.add(" ", geodata, symbol_size=10) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=geomax, min_=geomin)) figure_url = "/home/CitizenScience/file/visualization/" + str( display_id) + '_geo.png' # figure_url = str(display_id) + '_geo.png' make_snapshot(snapshot, geo.render(), figure_url, 2) # geo.render(path='render.html') # cmd = "snapshot render.html png" # try: # isRun = os.system(cmd) # print("截图完成") # except: # print("截图失败") # cmd = "mv output.png ../file/visualization/{}".format(figure_url) # try: # isRun = os.system(cmd) # print("移动完成") # except: # print("移动失败") # make_a_snapshot('geo2.html', 'geo3.png') return figure_url
# ---*- coding: utf-8 -*- # ¥- *--- author---祥彪--¥ from pyecharts import options as opts from pyecharts.charts import Geo, Page from pyecharts.globals import ChartType, SymbolType #定义地理图 geo = Geo() #设置画布宽度 geo.width = "800px" #设置画布高度 geo.height = "600px" #全局设置项 geo.set_global_opts(visualmap_opts = opts.VisualMapOpts(max_=100), title_opts=opts.TitleOpts(title="Geo-流向图")) #添加主题,中国地图,填充及边界颜色设置 geo.add_schema( maptype="china", itemstyle_opts=opts.ItemStyleOpts( border_color="#111", color="#454545"), ) #添加系列 geo.add( "", [("成都",10),("合肥",20),("宁波",30),("武汉",40),("西安",50),("郑州",60),("大连",70),("济南",80)], type_=ChartType.EFFECT_SCATTER, #散点图的一种形式 label_opts=opts.LabelOpts(is_show = True), #不显示数值则设置为False # color="red" ) geo.add( "",
.sort_values(ascending=False) avg_salary_by_loc.plot.bar() for i, v in enumerate(avg_salary_by_loc): plt.text(i, v, round(v, 2), ha='center', va='bottom') plt.title('不同区域平均工资柱状图', fontproperties=font_zh) plt.xticks(range(len(avg_salary_by_loc)), avg_salary_by_loc.index, fontproperties=font_zh) plt.xlabel('区域', fontproperties=font_zh) plt.ylabel('平均工资(千/年)', fontproperties=font_zh) loc_list = [[i, loc_counts[i]] for i in loc_counts.index] geo = Geo().add_schema(maptype='成都') geo.add('区域分布热度图', loc_list, type_=ChartType.HEATMAP) # 设置名称和数据 geo.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 设置标签是否可见 geo.set_global_opts(visualmap_opts=opts.VisualMapOpts()) # 视觉映射配置 geo.render('./loc_heatmap.html') # 保存为网页 os.system('"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"\ ./loc_heatmap.html') # 打开网页 # 工作经验分析 exp_data = data['job_exp'] exp_des = exp_data.describe() # 工作经验基本数据描述,包括平均数、中位数等 exp_counts = exp_data.value_counts().sort_index() # 按实际值进行频率统计 fig = plt.figure('平均工作经验统计详情', figsize=[16, 5]) plt.subplots_adjust(left=0.03, bottom=0.15, right=0.97, top=0.9, wspace=0.25) ax1 = fig.add_subplot(161) plt.title('平均工作经验年限详情描述', fontproperties=font_zh) for i, v in enumerate(exp_des):
addr_dic[provice] = 0 addr_dic[provice] += 1 # print(addr_dic) # print(addr_dic.items()) sort_addr = sorted(addr_dic.items(), key=lambda item: item[1], reverse=True)[0:10] print(sort_addr) # addr_names = [item[0] for item in sort_addr] # addr_counts = [item[1] for item in sort_addr] # print(addr_names, addr_counts) from pyecharts.charts import Geo from pyecharts.options import LabelOpts, VisualMapOpts, TitleOpts from pyecharts.globals import ChartType geo = Geo() geo.add_schema(maptype="china") geo.add("地点统计", sort_addr, type_=ChartType.EFFECT_SCATTER) geo.set_series_opts(label_opts=LabelOpts(is_show=False)) geo.set_global_opts( visualmap_opts=VisualMapOpts(is_piecewise=True, max_=sort_addr[0][1]), title_opts=TitleOpts(title="撩课Python统计"), ) geo.render("地点统计-geo图.html")