def ewide4(request): # gauge = Gauge("仪表盘示例") # gauge.add("业务指标", "完成率", 66.66) # gauge.show_config() template = loader.get_template('ewpyecharts.html') data = [ ('北京', 28), ('天津', 29), ('石家庄', 29), ('太原', 34), ('呼和浩特', 27), ('哈尔滨', 31), ('长春', 29), ('沈阳', 30), ('上海', 40), ('合肥', 40), ('南京', 40), ('济南', 35), ('青岛', 33), ('杭州', 40), ('福州', 37), ('厦门', 34), ('南昌', 39), ('武汉', 38), ('长沙', 39), ('郑州', 37), ('南宁', 36), ('广州', 33), ('深圳', 28), ('珠海', 30), ('海口', 30), ('三亚', 31), ('西安', 39), ('兰州', 32), ('乌鲁木齐', 31), ('西宁', 27), ('银川', 30), ('成都', 32), ('重庆', 38), ('贵阳', 29), ('昆明', 22), ('拉萨', 23), ('香港', 30), ('澳门', 30), ] # # geo = Geo("7月23日全国主要城市最高气温", "数据源自中国天气网", title_color="#000000", title_pos="center", # width=1200, height=600, background_color='#FFFFFF') # attr, value = geo.cast(data) # geo.add("", attr, value, visual_range=[20, 40], visual_text_color="#000000", symbol_size=15, is_visualmap=True) # geo.show_config() geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59') attr, value = geo.cast(data) geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color='#fff') # data = [ # ('汕头市', 50), ('汕尾市', 60), ('揭阳市', 35), # ('阳江市', 44), ('肇庆市', 72) # ] # geo = Geo("广东城市空气质量", "data from pm2.5", title_color="#fff", # title_pos="center", width=1200, # height=600, background_color='#404a59') # attr, value = geo.cast(data) # geo.add("", attr, value, maptype='广东', type="effectScatter", # is_random=True, effect_scale=5, is_legend_show=False) # # geo.show_config() context = dict( myechart=geo.render_embed(), host=REMOTE_HOST, script_list=geo.get_js_dependencies() ) return HttpResponse(template.render(context, request))
class PlotGeo: def __init__(self): self.data = {{'label': []}, } self.titles = ['全国销售情势图', 'data from sale'] self.indexes = [] self.geo = Geo() self.script_list = self.geo.get_js_dependencies() def plot_geo(self, dat, tit, ind): self.data = dat self.titles = tit self.indexes = ind self.geo = Geo(self.titles[0], self.titles[1], title_pos='center', title_color='#fff', width=1200, height=600, background_color='#404a59') for label in self.data.keys(): self.geo.add(label, self.indexes, self.data[label], visual_range=[0, 200], visual_text_color='#fff', symbol_size=15, is_visualmap=True) return self.geo.render_embed()
def geo_echarts(request): if not request.session.get('is_login', None): # 如果本来就未登录,也就没有登出一说 return redirect("/login/") if request.method == 'GET': ptime = request.GET.get('time') ptype = request.GET.get('type') phour = request.GET.get('hour') client = pymongo.MongoClient('localhost', 27017) db = client['earthquake'] col = db['geo_' + ptime] lon = [] lat = [] value = [] cities = [] print(col.count()) for item in col.find(): if item['index'] < int(phour): lon.append(item['lon']) lat.append(item['lat']) cities.append(item['city']) value.append(item['value']) style = Style(title_color="#fff", title_pos="center", width=1000, height=800, background_color="#404a59") df_dic = {'lon': lon, 'lat': lat, 'city': cities, 'value': value} df = pd.DataFrame(df_dic) print(df) attr = list(df['city']) value = list(df['value']) geo_coords = { df.iloc[i]['city']: [df.iloc[i]['lat'], df.iloc[i]['lon']] for i in range(len(df)) } if ptype == "0": # normal total_geo = Geo(ptime + '地震' + str(phour) + '小时内分布图', **style.init_style) total_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5, visual_text_color="#fff", is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=geo_coords) elif ptype == "1": # heatmap total_geo = Geo(ptime + '地震' + str(phour) + '小时内热力分布图', **style.init_style) total_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5, visual_text_color="#fff", type="heatmap", is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=geo_coords) context = dict(myechart=total_geo.render_embed(), host=REMOTE_HOST, script_list=total_geo.get_js_dependencies()) return render(request, "function/echart_base.html", context)
def geographical_distribution(self, time): dir_name = time[0:4] + time[5:7] + time[8:10] lon, lat, doc, tag, content, ttime, cities = self.load_doc(time) SI_value = [] for item, tag in zip(doc, tag): SI_value.append(self.SI.SI_content_2(item, tag)) vs = SI_value.copy() vs.sort() minSI = vs[0] vs.sort(reverse=True) maxSI = vs[0] print(SI_value) print('max-', maxSI, 'min- ', minSI) for i in range(len(SI_value)): if SI_value[i] > 12: SI_value[i] = 12 else: SI_value[i] = 10*(SI_value[i]-minSI)/(12-minSI) if len(lon) > 7000: wlon = [] wlat = [] wttime = [] wcities = [] wSI_value = [] for ilon, ilat, ittime, icities, ivalue in zip(lon, lat, ttime, cities, SI_value): if ivalue > 1.5: wlon.append(ilon) wlat.append(ilat) wttime.append(ittime) wcities.append(icities) wSI_value.append(ivalue) lon = wlon lat = wlat ttime = wttime cities = wcities SI_value = wSI_value df_dic = {'lon': lon, 'lat': lat, 'time': ttime, 'city': cities, 'value': SI_value} df = pd.DataFrame(df_dic) print(df) geo_coords = {df.iloc[i]['city']: [df.iloc[i]['lat'], df.iloc[i]['lon']] for i in range(len(df))} attr = list(df['city']) value = list(df['value']) vrange = [0, 0, 0, 0, 0] for i in range(len(df)): if df.iloc[i]['value'] > 8: vrange[0] += 1 elif df.iloc[i]['value'] > 6: vrange[1] += 1 elif df.iloc[i]['value'] > 4: vrange[2] += 1 elif df.iloc[i]['value'] > 2: vrange[3] += 1 else: vrange[4] += 1 print('percentage:') for item in vrange: print(item/len(df)*100, '%') if self.outputDB.find_one({'name': self.tableName}): self.outputDB.update_one({'name': self.tableName}, {'$set': { 'time': time, 'SI-V': vrange[0]/len(df), 'SI-IV': vrange[1]/len(df), 'SI-III': vrange[2]/len(df), 'SI-II': vrange[3]/len(df), 'SI-I': vrange[4]/len(df), }}) else: self.outputDB.insert_one({'name': self.tableName, 'time': time, 'SI-V': vrange[0]/len(df), 'SI-IV': vrange[1]/len(df), 'SI-III': vrange[2]/len(df), 'SI-II': vrange[3]/len(df), 'SI-I': vrange[4]/len(df), }) if not os.path.exists(dir_name + '/'): print("make new dir") os.makedirs(dir_name + '/') style = Style(title_color="#fff", title_pos="center", width=800, height=800, background_color="#404a59") total_geo = Geo('总体分布图', **style.init_style) total_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5, visual_text_color="#fff", is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=geo_coords) total_geo.render(dir_name + '/' + dir_name+'_all.html') # heatmap htotal_geo = Geo('总体热力分布图', **style.init_style) htotal_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5, visual_text_color="#fff", type="heatmap", is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=geo_coords) arg = htotal_geo.get_js_dependencies() htotal_geo.render(dir_name + '/' + dir_name + '_allH.html') start_time = datetime.strptime(time, "%Y-%m-%d %H:%M:%S") current_time = start_time timeIndex = [] timeDoc = [] for i in range(7): current_time = current_time + timedelta(hours=1) timeIndex.append(current_time) timeDoc.append([]) for ilon, ilat, ittime, icities, ivalue in zip(lon, lat, ttime, cities, SI_value): for i in range(7): if i == 6 or ittime < timeIndex[i+1]: timeDoc[i].append([ilon, ilat, ittime, icities, ivalue]) for i in range(6): print("in hour ", i, 'has', len(timeDoc[i])) tlon = [] tlat = [] tttime = [] tcities = [] tvalue = [] for sdoc in timeDoc[i]: tlon.append(sdoc[0]) tlat.append(sdoc[1]) tttime.append(sdoc[2]) tcities.append(sdoc[3]) tvalue.append(sdoc[4]) tdf_dic = {'lon': tlon, 'lat': tlat, 'time': tttime, 'city': tcities, 'value': tvalue} tdf = pd.DataFrame(tdf_dic) tgeo_coords = {tdf.iloc[i]['city']: [tdf.iloc[i]['lat'], tdf.iloc[i]['lon']] for i in range(len(tdf))} tattr = list(tdf['city']) tvalue = list(tdf['value']) tgeo = Geo(str(i+1) + '小时内分布图', **style.init_style) tgeo.add("", tattr, tvalue, visual_range=[5, 10], symbol_size=3, visual_text_color="#fff", is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=tgeo_coords) tgeo.render(dir_name + '/ ' + dir_name + str(i+1) + 'h.html') # heatmap htgeo = Geo(str(i + 1) + '小时内热力分布图', **style.init_style) htgeo.add("", tattr, tvalue, visual_range=[5, 10], symbol_size=3, visual_text_color="#fff", type='heatmap', is_visualmap=True, maptype='china', visual_split_number=10, geo_cities_coords=tgeo_coords) htgeo.render(dir_name + '/ ' + dir_name + str(i + 1) + 'H.html')