def bar_base_with_custom_background_image(): obj_bar = Bar( init_opts=opts.InitOpts( bg_color={ "type":"pattern", "image":JsCode("img"), "repeat":"no-repeat" } ) ) obj_bar.add_xaxis(Faker.choose()) obj_bar.add_yaxis("A", Faker.values()) obj_bar.add_yaxis("B", Faker.values()) obj_bar.set_global_opts( title_opts = opts.TitleOpts( title = "Bar-背景图基本示例", subtitle = "副标题", # 设置标题为白色 title_textstyle_opts=opts.TextStyleOpts(color="white") ) ) obj_bar.add_js_funcs( "var img = new Image(); img.src = 'https://s2.ax1x.com/2019/07/08/ZsS0fK.jpg';" ) return obj_bar
def show_dlt(self): red_balls = [] blue_balls = [] with open(self.input_file, 'r') as f: for i in range(Config.PAGES * Config.ITEMS_PER_PAGE): one_line_data = f.readline().strip() # print(one_line_data) red_balls.extend([ int(one_line_data[15 + (2 * i):15 + (2 * (i + 1))]) for i in range(5) ]) blue_balls.append(int(one_line_data[-4:-2])) blue_balls.append(int(one_line_data[-2:])) red_counter = Counter(red_balls) blue_counter = Counter(blue_balls) # print(red_balls) # print(blue_balls) # print(red_counter) # print(blue_counter) # print(red_counter.most_common()) # print(blue_counter.most_common()) red_dict = {} blue_dict = {} for i in red_counter.most_common(): red_dict['{}'.format(i[0])] = i[1] for j in blue_counter.most_common(): blue_dict['{}'.format(j[0])] = j[1] print(red_dict) print(blue_dict) red_list = sorted(red_counter.most_common(), key=lambda number: number[0]) blue_list = sorted(blue_counter.most_common(), key=lambda number: number[0]) print(blue_list) print(red_list) # 红球图表添加 red_bar = Bar() red_x = ['{}'.format(str(x[0])) for x in red_list] red_y = ['{}'.format(str(x[1])) for x in red_list] red_bar.add_xaxis(red_x) red_bar.add_yaxis('红色球出现的次数', red_y) # 篮球图表添加 blue_bar = Bar() blue_x = ['{}'.format(str(x[0])) for x in blue_list] blue_y = ['{}'.format(str(x[1])) for x in blue_list] blue_bar.add_xaxis(blue_x) blue_bar.add_yaxis('蓝色球出现的次数', blue_y, itemstyle_opts=opts.ItemStyleOpts(color='blue')) page = Page(page_title='大乐透数据分析', interval=3) page.add(red_bar) page.add(blue_bar) page.render(self.output_file)
def plot_data(condition,title): #distinct删除重复值 table_names = pd.read_sql( "select name from sqlite_master where type='table' order by name",engine).values if 'sqlite_sequence' in table_names: table_names = table_names[:-1] all_tables = table_names temp = None n = 1 for table in all_tables[:100]: sql=f"select distinct * from '{table[0]}' where trade_date>'20190101' and "+ condition data=pd.read_sql(sql,engine) print(f"第{n}/{len(all_tables[:100])}:{table[0]}已筛选!") if temp is None: temp = data else: temp = pd.concat([data, temp], axis=0) n += 1 count_=temp.groupby('trade_date')['ts_code'].count() # print(count_) attr=count_.index.values.tolist() v1=count_.values.tolist() bar=Bar() # # bar= BAR(title) bar.add_xaxis(attr) bar.add_yaxis('',v1) # # bar.add('',attr,v1,is_splitline_show=False,is_datazoom_show=True,linewidth=2) # bar.render() bar.render(title+'.html')
def bar(self,df,legend,title,path): ''' 柱状图 :param df: 要操作的数据 :param legend: 图例 :param title: 报表标题 :param path: 保存路径 :return: ''' tmp = df.value_counts() x = list(tmp.index) y = list(tmp) bar = Bar() bar.add_xaxis(x) bar.add_yaxis(legend, y, category_gap="60%") bar.set_series_opts(itemstyle_opts={ "normal": { "color": utils.JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(0, 244, 255, 1)' }, { offset: 1, color: 'rgba(0, 77, 167, 1)' }], false)"""), "barBorderRadius": [30, 30, 30, 30], "shadowColor": 'rgb(0, 160, 221)', }}) bar.set_global_opts(title_opts=opts.TitleOpts(title=title)) bar.render(path + '/' + title + '.html')
def main(): urls = [ "http://www.weather.com.cn/textFC/hz.shtml", "http://www.weather.com.cn/textFC/hb.shtml", "http://www.weather.com.cn/textFC/hn.shtml", "http://www.weather.com.cn/textFC/hd.shtml", "http://www.weather.com.cn/textFC/db.shtml", "http://www.weather.com.cn/textFC/xb.shtml", "http://www.weather.com.cn/textFC/xn.shtml", "http://www.weather.com.cn/textFC/gat.shtml", ] for url in urls: parse_page(url) ALL_DATA.sort(key=lambda data: data['max_temp'], reverse=True) data = ALL_DATA[0:10] print(data) cities = list(map(lambda x: x['city'], data)) temp_max = list(map(lambda x: x['max_temp'], data)) chart = Bar() chart.add_xaxis(cities) chart.add_yaxis('气温', temp_max) chart.render('temperature.html')
def main(): urls = [ '华北地区天气预报.html', '东北地区天气预报.html', '华东地区天气预报.html', '华中地区天气预报.html', '华南地区天气预报.html', '西北地区天气预报.html', '西南地区天气预报.html', '港澳台地区天气预报.html', ] for url in urls: parse_page(url) # 分析数据 # 根据最低气温进行排序 ALL_DATA.sort(key=lambda data: data['min_temp']) # print(ALL_DATA) data = ALL_DATA[0:10] cities = map(lambda x: x['city'], data) min_temp = map(lambda x: x['min_temp'], data) bar = Bar() bar.add_xaxis(list(cities)) bar.add_yaxis("今日中国最低温度", list(min_temp)) bar.render("mycharts_local.html")
def chart_by_one_ver(by_type, pro_id, item, title, L=None): """ 生成项目特定版本下的不同分类的bug分布图表 :param by_type: 分类 :param pro_id: 项目标识 :param L: 资源类别名称、资源bug数量组成的列表 :param item: 图表图示 :param title: 图表title :return: html格式的图表 """ if L is None: L = [] result = getdata.get_issue_by_one_ver(by_type, pro_id) for v in result: L.append(v) xaxis_data = [] yaxis_data = [] else: print('L的类型必须为None,请检查') if len(L) != 0: xaxis_data = [x[0] for x in L] yaxis_data = [x[1] for x in L] v_name = [x[2] for x in L][0] title = ''.join([title, v_name, '版本']) bar = Bar() bar.add_xaxis(xaxis_data) bar.add_yaxis(item, yaxis_data) bar.set_global_opts(title_opts=opts.TitleOpts(title=title)) if os.path.exists(os.path.join(chart_path, '{}.html'.format(title))): os.remove(os.path.join(chart_path, '{}.html'.format(title))) bar.render(os.path.join(chart_path, '{}.html'.format(title))) else: print('没有数据可展示')
def create_avg_likes(df): # 筛选 df = df[df['videos'] > 0] # 计算单个视频平均点赞数 df.eval('result = likes/(videos*10000)', inplace=True) df['result'] = df['result'].round(decimals=1) df = df.sort_values('result', ascending=False) # 取TOP10 attr = df['name'][0:10] v1 = ['%.1f' % (float(i)) for i in df['result'][0:10]] # 初始化配置 bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px")) # 添加数据 bar.add_xaxis(list(reversed(attr.tolist()))) bar.add_yaxis("", list(reversed(v1))) # 设置全局配置项,标题、工具箱(下载图片)、y轴分割线 bar.set_global_opts( title_opts=opts.TitleOpts(title="抖音大V平均视频点赞数TOP10(万)", pos_left="center", pos_top="18"), toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}), xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts( is_show=True))) # 设置系列配置项 bar.set_series_opts(label_opts=opts.LabelOpts( is_show=True, position="right", color="black")) # 翻转xy轴 bar.reversal_axis() bar.render("抖音大V平均视频点赞数TOP10(万).html")
def create_abroad(df): # 筛选数据 df = df[(df["country"] != "中国") & (df["country"] != "") & (df["country"] != "暂不设置") & (df["country"] != "China")] df1 = df.copy() # 数据替换 df1["country"] = df1["country"].str.replace("United States", "美国").replace("大韩民国", "韩国") # 分组计数 df_num = df1.groupby("country")["country"].agg( count="count").reset_index().sort_values(by="count", ascending=False) df_country = df_num[:8]["country"].values.tolist() df_count = df_num[:8]["count"].values.tolist() # 初始化配置 bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px")) bar.add_xaxis(df_country) bar.add_yaxis("", df_count) bar.set_global_opts( title_opts=opts.TitleOpts(title="抖音大V国外分布TOP10", pos_left="center", pos_top="18"), toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}), yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts( is_show=True))) bar.set_series_opts( label_opts=opts.LabelOpts(is_show=True, position="top", color="black")) bar.render("抖音大V国外分布TOP10.html")
def show(x: list, y: list, title: str = "键盘键入统计"): bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) bar.add_xaxis(x) bar.add_yaxis("", y, category_gap="60%") bar.set_series_opts( itemstyle_opts={ "normal": { "color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(0, 244, 255, 1)' }, { offset: 1, color: 'rgba(250, 177, 160, 1)' }], false)"""), "barBorderRadius": [30, 30, 30, 30], "shadowColor": "rgb(0, 160, 221)", } }) bar.set_global_opts( title_opts=opts.TitleOpts(title=title), datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], ) bar.load_javascript() bar.render_notebook() return Markup(bar.render_embed())
def city_company_scale_chart(self): """前10城市的企业阶段""" city_company_scale = pd.crosstab(self.frame.city, self.frame.company_scale, margins=True).sort_values( by='All', ascending=False)[:10] city_company_scale = city_company_scale.drop('All', axis=0).drop('All', axis=1) html_path = os.path.join( create_or_get_directory(os.path.join('report', 'single')), 'city_company_scale_chart.html') bar = Bar(init_opts=opts.InitOpts(width="60%")) bar.add_xaxis(list(city_company_scale.index)) for i in range(len(list(city_company_scale.T.index))): bar.add_yaxis(city_company_scale.T.index[i], [str(v) for v in city_company_scale.T.values[i]]) bar.set_global_opts( legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(rotate=-20, color='red')), yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( color='red')), ) bar.render(html_path) script_string = self.get_javascript_string(html_path) self.set_report_javascript(script_string, 'city_company_scale_chart') self.right_charts.append({ 'title': '前10城市的企业阶段', 'name': 'city_company_scale_chart' })
def generate_bar(self, x_axis, y_axis): bar = Bar(init_opts=opts.InitOpts(width="1280px", height="720px")) bar.add_xaxis(x_axis) bar.add_yaxis("", y_axis) bar.set_global_opts(xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(rotate=10))) bar.render('bar.html')
def get_plot_base(self, _df, title_name='数据分布', subtitle_name=''): ''' plot line & bar info :param _df: :return: ''' bar = Bar() line = Line() bar.set_global_opts( title_opts=opts.TitleOpts(title=title_name, subtitle=subtitle_name), yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( formatter="{value}")), datazoom_opts=opts.DataZoomOpts(), # 滑动条 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( rotate=-15)), # label旋转 toolbox_opts=opts.ToolboxOpts(), ) xaxis = list(map(str, _df.index)) bar.add_xaxis(xaxis) line.add_xaxis(xaxis) for field in _df.columns: field = str(field) bar.add_yaxis(series_name=field, yaxis_data=_df[field].to_list(), is_selected=True) line.add_yaxis(series_name=field + self.series_name_add, y_axis=_df[field].to_list(), is_symbol_show=False) bar.overlap(line) return bar
def generte_bar_chart(title: str, xaxis_caption: str, range_groups: List[IntegerRangeCounterGroup], bar_gap: int = 4) -> Bar: chart = Bar() chart.set_global_opts( title_opts=opts.TitleOpts(title=title), yaxis_opts=opts.AxisOpts( name='Samples', name_textstyle_opts=opts.global_options.TextStyleOpts( font_size=16)), xaxis_opts=opts.AxisOpts( name=xaxis_caption, name_textstyle_opts=opts.global_options.TextStyleOpts( font_size=16))) # Data (y axis) for range_group in range_groups: # Add values on the yaxis for each file type. # If the count is 0, replace it by None to avoid overlapped numbers in the chart. chart.add_yaxis(range_group.file_type, range_group.counts, category_gap=bar_gap, stack="stack1") # Captions (x axis) chart.add_xaxis(range_groups[0].captions) chart.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) return chart
def bar(x, y): bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)) bar.add_xaxis(x) bar.add_yaxis("盈利", y) bar.set_global_opts(title_opts=opts.TitleOpts(title="380平台月盈利")) bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) bar.render('../graph/4.1平台月盈利.html')
def create_likes(df): # 排序,降序 df = df.sort_values('likes', ascending=False) # 获取TOP10的数据 attr = df['name'][0:10] v1 = [float('%.1f' % (float(i) / 100000000)) for i in df['likes'][0:10]] # 初始化配置 bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px")) # x轴数据 bar.add_xaxis(list(reversed(attr.tolist()))) # y轴数据 bar.add_yaxis("", list(reversed(v1))) # 设置全局配置项,标题、工具箱(下载图片)、y轴分割线 bar.set_global_opts( title_opts=opts.TitleOpts(title="抖音大V点赞数TOP10(亿)", pos_left="center", pos_top="18"), toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}), xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts( is_show=True))) # 设置系列配置项,标签样式 bar.set_series_opts(label_opts=opts.LabelOpts( is_show=True, position="right", color="black")) bar.reversal_axis() bar.render("抖音大V点赞数TOP10(亿).html")
def testBar(self): bar = Bar() bar.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105]) bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49]) bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况")) bar.render()
def create_cut_likes(df): # 将数据分段 Bins = [ 0, 1000000, 5000000, 10000000, 25000000, 50000000, 100000000, 5000000000 ] Labels = [ '0-100', '100-500', '500-1000', '1000-2500', '2500-5000', '5000-10000', '10000以上' ] len_stage = pd.cut(df['likes'], bins=Bins, labels=Labels).value_counts().sort_index() # 获取数据 attr = len_stage.index.tolist() v1 = len_stage.values.tolist() # 生成柱状图 bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px")) bar.add_xaxis(attr) bar.add_yaxis("", v1) bar.set_global_opts( title_opts=opts.TitleOpts(title="抖音大V点赞数分布情况(万)", pos_left="center", pos_top="18"), toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}), yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts( is_show=True))) bar.set_series_opts( label_opts=opts.LabelOpts(is_show=True, position="top", color="black")) bar.render("抖音大V点赞数分布情况(万).html")
def __plot_con_notebook(self, split_n)->pyecharts.charts.Bar: """ 调用echarts,连续变量 :param split_n: :return: """ data = self.data[~np.isnan(self.X)] data.sort_values('X',inplace=True) X = data['X'].values y = data['y'].values max_x = max(X) min_x = min(X) freq,edge = np.histogram(X, np.linspace(min_x, max_x, split_n+1)) freq = np.round(freq/data.shape[0] *100,2) # print(freq) # print(edge) bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) bar.load_javascript() bar.add_xaxis([('(' + str(int(edge[i])) + ' , ' + str(int((edge[i + 1]))) + ']') if i else ( '[' + str(int(edge[i])) + ' , ' + str(int((edge[i + 1]))) + ']') for i in range(len(edge) - 1)]) bar.add_yaxis(self.var_name, freq.tolist(), category_gap=1, ) bar.set_global_opts(title_opts=opts.TitleOpts(title=self.var_name), datazoom_opts=opts.DataZoomOpts(is_show=True), xaxis_opts=opts.AxisOpts(name_location='end', name='Groups'), yaxis_opts=opts.AxisOpts(name_location='end', name='%'), ) bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) return bar
def draw_amount_bar(self): """ 画出股票的成交量和 需要传入的数据是股票的["amount" :return: """ # SC = "000021.SZ" Df_s1 = Read_One_Stock(self.SC).select_col("vol", "amount") length = Df_s1.shape[0] Df_s1.sort_values("trade_date", inplace=True) Df_s1.index = list(range(length)) amount = np.array(Df_s1["amount"]).tolist() date = np.array(Df_s1["trade_date"], dtype=np.string_).tolist() bar = Bar() bar.set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title="K-Line of {}".format(self.SC))) bar.add_xaxis(date) bar.add_yaxis("Amounts", amount, label_opts=opts.LabelOpts(is_show=False)) bar.render("./Plots/{} Amount Bar Plot.html".format(self.SC))
def main(): regions = ['hb', 'db', 'hd', 'hz', 'hn', 'xb', 'xn', 'gat'] # gat 的源码不规范 for index, region in enumerate(regions): # 获取url url = URL.format(region) html = get_url(url) # 规则网页 parse_html(html) # 数据可视化(数据分析) # 根据最低气温排序 ALL_DATA.sort(key=lambda data: data['min_temp']) data = ALL_DATA[:10] # 取前十个 # 从列表元素(字典),获取值。 # 方法1、遍历列表,获取列表的字典的值,再把这些值放入新列表;方法2、map # 全部城市 citys = list(map(lambda x: x['city'], data)) # 全部天气 min_temps = list(map(lambda x: x['min_temp'], data)) # pyechars bar = Bar() # 初始化 bar.add_xaxis(citys) bar.add_yaxis("城市", min_temps) # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件 # 也可以传入路径参数,如 bar.render("mycharts.html") bar.render("mycharts.html")
def main(): urls = [ 'http://www.weather.com.cn/textFC/hb.shtml', 'http://www.weather.com.cn/textFC/db.shtml', 'http://www.weather.com.cn/textFC/hd.shtml', 'http://www.weather.com.cn/textFC/hz.shtml', 'http://www.weather.com.cn/textFC/hn.shtml', 'http://www.weather.com.cn/textFC/xb.shtml', 'http://www.weather.com.cn/textFC/xn.shtml', 'http://www.weather.com.cn/textFC/gat.shtml' ] for url in urls: parse_page(url) # 分析数据 # 根据最低气温进行排序 ALL_DATA.sort(key=lambda data: data['min_temp']) # print(ALL_DATA) data = ALL_DATA[0:10] cities = map(lambda x: x['city'], data) min_temp = map(lambda x: x['min_temp'], data) bar = Bar() bar.add_xaxis(list(cities)) bar.add_yaxis("今日中国最低温度", list(min_temp)) bar.render("mycharts.html")
def timeline_bar() -> Timeline: allBars = [] # 共有 12 个Bar for (months, index) in zip(yearMonth, range(0, 11)): bar = Bar() bar.set_global_opts(title_opts=opts.TitleOpts("实验二-每月的购买力活跃程度")) bar.add_xaxis(['municipal']) for z in zip(list(np.array(rowData)[:, 0]), list(np.array(rowData)[:, index + 1]), list(np.array(rowBrand)[:, index + 1])): bar.add_yaxis( series_name=z[0] + z[2], yaxis_data=[z[1]]).set_global_opts( title_opts=opts.TitleOpts("实验四-每月的销售最高Brand-city"), legend_opts=opts.LegendOpts( type_='scroll', pos_left='50%', )) allBars.append(bar) # 将allBars 与时间轴绑定 tl = (Timeline().add_schema(play_interval=2000, is_auto_play=True)) # bug:为什么后面的 bar 的x轴坐标会覆盖掉前面的bar呢 for (itemTime, itemBar) in zip(yearMonth, allBars): tl.add(itemBar, itemTime) return tl
def gzu_major_satisfied(): data1 = analysis_data.gzu_satisfied() data1 = data1.iloc[:, :5] print(data1) type_sas = { '综合满意度': 'all', '办学条件满意度': 'facility', '教学质量满意度': 'teaching', '就业满意度': 'job' } c = Bar() for a in type_sas: c.add_xaxis([str(x) for x in data1['major'].values]) c.add_yaxis(a, [x for x in data1[type_sas[a]].values]) c.set_global_opts( yaxis_opts=opts.AxisOpts(min_=3), xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=10, interval=0)), datazoom_opts=opts.DataZoomOpts()) c.set_series_opts( label_opts=opts.LabelOpts(is_show=False), markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="最大值"), ]), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均值"), ]), ) return c
def create_result_chart(data): instrulist = list(set(d.instrument for d in data)) # x = ["{} P{}".format(localtime(d.upload_time).strftime("%Y-%m-%d %X"), d.platenum) for d in data] x = ["{} P{}".format(d.upload_time.strftime("%Y-%m-%d %X"), d.platenum) for d in data] # 均值直方图 b = Bar(init_opts=opts.InitOpts(width='1900px')) b.add_xaxis(x) for instru in instrulist: mean = get_mean(data, instru) b.add_yaxis(instru, mean) b.set_global_opts(title_opts=opts.TitleOpts(title="结果mean图")) # sd折线图 l = Line(init_opts=opts.InitOpts(width='1900px')) l.add_xaxis(x) for instru in instrulist: sd = get_sd(data, instru) l.add_yaxis(instru, sd, is_connect_nones=True) l.set_global_opts(title_opts=opts.TitleOpts(title="结果sd图", pos_top='48%')) grid = Grid(init_opts=opts.InitOpts(width='1900px')) grid.add(b, grid_opts=opts.GridOpts(pos_bottom='60%')) grid.add(l, grid_opts=opts.GridOpts(pos_top='60%')) return grid
def paint_bar(self, x: list, collects: list, title: str, mark_point: bool = False): bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) bar.add_xaxis(x) for collect in collects: for i, (name, unit, data) in enumerate(collect): bar.add_yaxis(f'{name}-单位:{unit}', data, yaxis_index=i) if i != 0: bar.extend_axis(yaxis=opts.AxisOpts( name='', type_='value', position='right', )) bar.set_global_opts(title_opts=opts.TitleOpts(title=title, pos_left='5%'), legend_opts=opts.LegendOpts(pos_bottom='0')) bar.set_series_opts( label_opts=opts.LabelOpts(position='top'), tooltip_opts=opts.TooltipOpts(formatter=f'{{b}}年{{a}}:{{c}}')) if mark_point: bar.set_series_opts( markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_='max', name='最大值'), opts.MarkPointItem(type_='min', name='最小值') ], symbol_size=80)) return bar
def theme_macarons(make_new, tag): tl = Timeline(init_opts=opts.InitOpts( theme=ThemeType.MACARONS)) # theme=ThemeType.PURPLE_PASSION tl.add_schema( pos_bottom='-7px', is_auto_play=True, symbol_size=[20, 20], play_interval=2000, ) for i in range(2015, 2020): bar = Bar() bar.add_xaxis(list(make_new.columns)) bar.add_yaxis("", list(make_new.loc[i, :].values), label_opts=opts.LabelOpts(is_show=False)) bar.set_colors([ random.choice([ 'blue', 'rgba(100,255,0,0.8)', '#5793f3', '#007A99', 'yellow' ]) ]) bar.set_global_opts( xaxis_opts=opts.AxisOpts(name="", axislabel_opts={"rotate": 40}), title_opts=opts.TitleOpts("{}-{}指数".format(i, tag))) tl.add(bar, "{}年".format(str(i))) return tl
def main(): urls = [ 'http://www.weather.com.cn/textFC/hb.shtml', 'http://www.weather.com.cn/textFC/db.shtml', 'http://www.weather.com.cn/textFC/hd.shtml', 'http://www.weather.com.cn/textFC/hz.shtml', 'http://www.weather.com.cn/textFC/hn.shtml', 'http://www.weather.com.cn/textFC/xb.shtml', 'http://www.weather.com.cn/textFC/xn.shtml', 'http://www.weather.com.cn/textFC/gat.shtml' ] for url in urls: parse_page(url) # 数据分析 根据最低气温排序 ALL_DATA.sort(key=lambda data: data["min_temp"]) # 通过key指定根据什么排序 # data 是ALL_DATA列表中每一行的字典数据, 根据data["min_temp"]返回值排序 data = ALL_DATA[0:10] # 最低气温排前十的城市/区 cities = list(map(lambda x: x['city'], data)) temps = list(map(lambda x: x['min_temp'], data)) chart = Bar() # 给这个图取名 #chart.add(cities,temps,is_more_utils=True) chart.add_xaxis(cities) chart.add_yaxis("最低气温表", temps) chart.render('temperature.html')
def plot_echart(df, type='Bar', title=None, theme='dark'): ''' 数据可视化 :param df: 数据表 :param type: 图像类型 :param title: 图像标题 :return: chart ''' label_x = df.columns[0] x = list(df[label_x]) label_y = df.columns[-1] y = list(df[label_y]) chart = Bar() if type == 'Bar': # 绘制柱形图 chart = Bar(opt.InitOpts(theme=theme)) x = list(df[label_x]) # x轴 y = list(df[df.columns[-1]]) # y轴 chart.add_xaxis(x) chart.add_yaxis(label_y, y) elif type == 'Pie': # 绘制饼图 x = df[label_x] chart = (Pie().add(series_name=label_y, data_pair=list(zip(list(x), y)))) # 图像设置 chart.set_global_opts(title_opts=opt.TitleOpts(title=title), toolbox_opts=opt.ToolboxOpts(is_show=True), legend_opts=opt.LegendOpts(pos_bottom=1)) return chart
def bar_histogram(): x = Faker.dogs + Faker.animal xlen = len(x) y = [] for idx, item in enumerate(x): if idx <= xlen / 2: bar_item = opts.BarItem( name=item, value=(idx + 1) * 10, itemstyle_opts=opts.ItemStyleOpts(color="#749f83") ) else: bar_item = opts.BarItem( name=item, value=(xlen + 1 - idx) * 10, itemstyle_opts=opts.ItemStyleOpts(color="#d48265"), ) y.append(bar_item) obj_bar = Bar() obj_bar.add_xaxis(x) #直方图就是紧挨着的系列柱category_gap=0调节系列柱之间距离, # color=Faker.rand_color()因为上面设置了柱的颜色,这里只对图例legend的颜色起作用 obj_bar.add_yaxis("series0", y, category_gap=0,color=Faker.rand_color()) obj_bar.set_global_opts( title_opts=opts.TitleOpts(title="Bar-直方图(颜色区分)", subtitle="副标题") ) return obj_bar