def get_pie(city, center1, center2): data = df.loc[df['City'] == city, ['Date', 'AQI_Bucket']] rank_message = data.groupby(['AQI_Bucket']) rank_com = rank_message['AQI_Bucket'].agg(['count']) rank_com.reset_index(inplace=True) rank_com_last = rank_com.sort_values('count', ascending=False) x = rank_com_last['AQI_Bucket'] y = rank_com_last['count'] pie = Pie(init_opts=opts.InitOpts(width='400px', height='300px')) input_data = [list(z) for z in zip(x, y)] pie.add(city, input_data, center=center1, radius=['15%', '30%']) pie.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%')) pie.set_global_opts(title_opts=opts.TitleOpts( title=city, pos_left=center2[0], pos_top=center2[1], ), legend_opts=opts.LegendOpts(is_show=False)) return pie
def mkhtml2(name1): """ 饼图 :return:生成豆瓣top250电影产源国家数量占比分析图html文件 """ # ORM查询 myresult = Test.objects.values('address').annotate( count=Count('name')).order_by('-count')[:10] # fetchall() 获取所有记录 namelist = [] # 将变量存在列表里 numlist = [] for name in myresult: namelist.append(name['address']) numlist.append(name['count']) pie = Pie() pie.add( "占比", [list(z) for z in zip(namelist, numlist)], center=["40%", "60%"], ) pie.set_global_opts( title_opts=opts.TitleOpts(title="豆瓣top250电影产源国家数量占比"), legend_opts=opts.LegendOpts(pos_left="35%"), ) # 设置显示的样子,加入了百分比 pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)")) pie.render(f'{name1}') print(f'{name1}已生成')
def pie_set_colors(): obj_pie = Pie() obj_pie.add("",[list(z) for z in zip(Faker.choose(), Faker.values())]) obj_pie.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"]) obj_pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) obj_pie.set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色",subtitle ="副标题")) return obj_pie
def analyze_remark_name(): close_partner_dict = { '宝宝,糙糙,仙女,亲爱,老婆': 0, '老公': 0, '父亲,爸': 0, '母亲,妈': 0, '闺蜜,死党,基友': 0 } # 遍历好友数据 for user in friends: for key in close_partner_dict.keys(): # 判断该好友备注名是否包含close_partner_dict中的任意一个key name = key.split(',') for sub_name in name: if (sub_name in user.remark_name): close_partner_dict[key] += 1 break name_list = ['最重要的她', '最重要的他', '爸爸', '妈妈', '死党'] num_list = [x for x in close_partner_dict.values()] pie = Pie() pie.add("可能是你最亲密的人", [list(z) for z in zip(name_list, num_list)]) pie.set_global_opts(title_opts=opts.TitleOpts(title="可能是你最亲密的人")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie.render('data/你最亲密的人.html')
def statistics_friends(): # 初始化 unknown, known_male, known_female, known_other = 0, 0, 0, 0 # 遍历 for user in friends: # 备注不为空 if ((user.remark_name).strip()): if (user.sex == 1): known_male += 1 elif (user.sex == 2): known_female += 1 else: known_other += 1 else: unknown += 1 name_list = ['未设置备注的好友', '设置备注的男性好友', '设置备注的女性好友', '设置备注的其他好友'] num_list = [unknown, known_male, known_female, known_other] pie = Pie() pie.add("你认识的好友比例", [list(z) for z in zip(name_list, num_list)]) pie.set_global_opts(title_opts=opts.TitleOpts(title="你认识的好友比例")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie.render('data/你认识的好友比例.html')
def Pie_base(sql, titl) -> Pie: pie = Pie() # engine = create_engine("mysql+pymysql://root:root@localhost:3306/mysql", encoding="utf-8") # session = sessionmaker(bind=engine) # # sql= "select gzlx as 故障类型,count(1) as 数量 from b_epos where rq BETWEEN '%s' and '%s' group by gzlx"% (rq1, rq2) # df = pd.read_sql(sql, engine) # rows=df.values.tolist() # headers=df.columns.tolist() with SQLPoll() as db: students = db.fetch_all(sql, None) headers = [] for student in students: headers = list(student.keys()) break c = [] rows = [] for student in students: c = list(student.values()) rows += [c] if len(rows) == 0: rows = [['无', 0]] pie.add("", rows) pie.set_global_opts(title_opts=opts.TitleOpts(title=titl)) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")) return pie
def MutiplePieCharts(datas): height_i = '450' if len(datas) > 3: height_i = height_i + (350 * (len(datas) // 3)) height = str(height_i) + 'px' pie = Pie(init_opts=opts.InitOpts(width="100%", height=height)) left_i = 1 right_i = 1 for data in datas: right = str(300 * right_i) + 'px' if left_i == 1: left = '20%' left_i = 2 elif left_i == 2: left = '50%' left_i = 3 else: left = '80%' right_i += 1 left_i = 1 pie.add( data[0], data[1], center=[left, right], radius=120, ) pie.set_global_opts(title_opts=opts.TitleOpts(title="磁盘使用率"), ) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"), ) return pie.render_embed()
def draw_category_pie(inner, outside, inner_title="分类报表", outer_title='小类报表', width=2000) -> Pie: pie = Pie() inner_radius = "70%" outer_radius = "80%" pie.add( series_name=inner_title, data_pair=inner, radius=["0%", inner_radius], label_opts=opts.LabelOpts(position="inner"), ) pie.add( series_name=outer_title, radius=[inner_radius, outer_radius], data_pair=outside, label_opts=opts.LabelOpts( position="outside", formatter="{b}:\n{c}({d}%)", border_width=1, border_radius=4, ), ) pie.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical"), ) pie.set_series_opts(tooltip_opts=opts.TooltipOpts( trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)")) return pie
def order_chart(): # 今日各状态订单总金额 pie2 = Pie() pie2.add("", list(order_status_total.items())) pie2.set_global_opts(title_opts=opts.TitleOpts(title="今日各状态订单总金额")) pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) return pie2.dump_options_with_quotes()
def create_gender(data): df = data.copy() # 修改数值 df.loc[df.gender == '0', 'gender'] = '未知' df.loc[df.gender == '1', 'gender'] = '男性' df.loc[df.gender == '2', 'gender'] = '女性' # 根据性别分组 gender_message = df.groupby(['gender']) # 对分组后的结果进行计数 gender_com = gender_message['gender'].agg(['count']) gender_com.reset_index(inplace=True) # 饼图数据 attr = gender_com['gender'] v1 = gender_com['count'] # 初始化配置 pie = Pie(init_opts=opts.InitOpts(width="800px", height="400px")) # 添加数据,设置半径 pie.add("", [list(z) for z in zip(attr, v1)], radius=["40%", "75%"]) # 设置全局配置项,标题、图例、工具箱(下载图片) pie.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V性别分布情况", pos_left="center"), legend_opts=opts.LegendOpts(orient="vertical", pos_left="left"), toolbox_opts=opts.ToolboxOpts( is_show=True, feature={"saveAsImage": {}})) # 设置系列配置项,标签样式 pie.set_series_opts( label_opts=opts.LabelOpts(is_show=True, formatter="{b}:{d}%")) pie.render("抖音大V性别分布情况.html")
def sexAnalyse(itemname_, itemnamelist_, itemnumlist_): totle = itemnumlist_[0] + itemnumlist_[1] + itemnumlist_[2] subtitle = "共有:%d个好友" % totle pie = Pie()#新建饼图对象 pie.add("",[list(z) for z in zip(itemnamelist_,itemnumlist_)],center=["35%", "50%"])#饼图对象数据添加 pie.set_global_opts(title_opts=opts.TitleOpts(title=subtitle),legend_opts=opts.LegendOpts(pos_left="15%"),) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) outFileName = itemname_+ '.html' pie.render(outFileName)#保存饼图对象
def pie_render_air(self): """ * 实心圆一个,仅支持一份参数; """ # c = Pie(init_opts=opts.InitOpts(width="1600px", height="800px")) c = Pie() c.add( series_name=self.y_name, # radius=["40%", "55%"], # 半圆的尺寸; radius=[0, "55%"], data_pair=self.inner_data_pair, label_opts=opts.LabelOpts( position="outside", formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ", background_color="#eee", border_color="#aaa", border_width=1, border_radius=4, rich={ "a": { "color": "#999", "lineHeight": 22, "align": "center" }, "abg": { "backgroundColor": "#e3e3e3", "width": "100%", "align": "right", "height": 22, "borderRadius": [4, 4, 0, 0], }, "hr": { "borderColor": "#aaa", "width": "100%", "borderWidth": 0.5, "height": 0, }, "b": { "fontSize": 16, "lineHeight": 33 }, "per": { "color": "#eee", "backgroundColor": "#334455", "padding": [2, 4], "borderRadius": 2, }, }, ), ) c.set_global_opts(title_opts=opts.TitleOpts(title=self.title), legend_opts=opts.LegendOpts(pos_left=self.pos_left, orient="vertical")) c.set_series_opts(tooltip_opts=opts.TooltipOpts( trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)")) return c
def sex_chart(data, movie_id): list = [] data = data['gender'].value_counts() for key, v in enumerate(data): list.append([sex[key], v]) pie = Pie() pie.add("", list) pie.set_global_opts(title_opts=opts.TitleOpts(title="评论用户性别分布饼图")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie.render('user_sex_' + movie_id + '.html')
def show_pie(id): attr = ["成功(含熔断)", "失败", "限流"] counts = [len(sync.success), len(sync.fail), sync.limit] c = Pie(init_opts=opts.InitOpts( width='1200px', height='800px', page_title='page')) c.add("", [list(attr) for attr in zip(attr, counts)]) c.set_colors(["green", "red", "blue"]) c.set_global_opts(title_opts=opts.TitleOpts(title="成功失败数量饼图")) c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) c.render('成功失败数量饼图{}.html'.format(id + 1))
def pie_render_genre(self): c = Pie() c.add(self.y_name, self.inner_data_pair, center=["35%", "50%"]) c.set_global_opts(title_opts=opts.TitleOpts(title=self.title), legend_opts=opts.LegendOpts(pos_left=self.pos_left, orient="vertical")) c.set_series_opts(tooltip_opts=opts.TooltipOpts( trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"), label_opts=opts.LabelOpts(formatter="{b}: {d}%")) return c
def pie_radius(): obj_pie = Pie() # radius=["40%", "75%"]饼图的半径,数组的第一项是内半径,第二项是外半径 obj_pie.add("",[list(z) for z in zip(Faker.choose(), Faker.values())],radius=["40%", "75%"],) obj_pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) obj_pie.set_global_opts( title_opts=opts.TitleOpts(title="Pie-Radius",subtitle ="副标题"), # 让图例legend显示到左侧 legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"), ) return obj_pie
def pie(): pie = Pie(init_opts=opts.InitOpts( theme=ThemeType.PURPLE_PASSION, width="1280px", height="1080px")) pie.add( "", [list(z) for z in zip(data["项目简称"].to_list(), data["母婴"].to_list())], radius=["40%", "75"]) pie.set_global_opts( title_opts=opts.TitleOpts(title="各类母婴产品", pos_bottom='50%')) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}")) pie.render('../graph/5.4(各类母婴产品盈利).html')
def get_message_type_frequency(file_path, wxid): """ :param file_path: 经过预处理后的message表存储位置 :param wxid: 待查询人的微信id :return: """ # file_path = r'D:\wechet-anayze\pre-message-2.txt' message = pd.read_csv(file_path, sep=',', encoding='utf-8', low_memory=False) # wxid = '' # 进行数据筛选,选择message表中与所需微信id一致的数据 message = message[message['talker'] == wxid] # 根据消息类型统计每种类型的频次(索引为数字编码) chat_type_count = message['type'].groupby(message['type']).size() # 消息类型对应关系 message_type = {'1': '文本内容', "3": "图片及视频", "34": "语音消息", "42": "名片信息", "43": "图片及视频", "47": "表情包", "48": "定位信息", "49": "小程序链接", "10000": "消息撤回提醒", "1048625": "网络照片", "16777265": "链接信息", "419430449": "微信转账", "436207665": "红包", "469762097": "红包", "-1879048186": "位置共享"} # 集合对象,功能与chat_type_count相同,存储(聊天类型:频次)信息(索引为对应中文类型) chat_type_count_dict = {} # 根据消息类型代码 for key in chat_type_count.index: if str(key) in message_type.keys(): print(message_type.get(str(key))) chat_type_count_dict[message_type.get(str(key))] = chat_type_count[key] else: chat_type_count_dict[key] = chat_type_count[key] print("结果集类型: ", type(chat_type_count_dict)) print(chat_type_count_dict) x_data = [] y_data = [] for key in chat_type_count_dict: temp = [str(key), chat_type_count_dict.get(key)] x_data.append(str(key)) y_data.append(int(chat_type_count_dict.get(key))) a1 = [] for z in zip(x_data, y_data): a1.append(z) pie = Pie(init_opts=opts.InitOpts(width="1600px", height="600px", page_title="消息类型统计")) pie.add( "", data_pair=a1, center=["35%", "60%"], ) pie.set_global_opts( title_opts=opts.TitleOpts(title="Pie-调整位置"), legend_opts=opts.LegendOpts(pos_left="15%"), ) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}")) pie.render("message_type_count.html")
def drawPie(title, data, savepath='./results'): if not os.path.exists(savepath): os.mkdir(savepath) pie = Pie() attrs = [i for i, j in data.items()] values = [j for i, j in data.items()] pie.add("", [list(z) for z in zip(attrs, values)]) pie.set_global_opts(title_opts=opts.TitleOpts(title="评分情况"), legend_opts=opts.LegendOpts(pos_left=160)) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}")) pie.render(os.path.join(savepath, '%s.html' % title))
def level_pie(data): level_list = [[i, j] for i, j in enumerate(data['userlevel'].value_counts())] pie = Pie() pie.add("", level_list, radius=["40%", "75%"]) pie.set_global_opts(title_opts=opts.TitleOpts(title="等级分布"), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie.render("等级分布.html")
def generate_pie_html(dict_rows, key, value): data = [] for row in dict_rows: data.append([row[key], round(row[value], 2)]) pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.SHINE)) pie.add("", data) # pie.set_global_opts(title_opts=opts.TitleOpts(title="我的摊大饼策略分布")) pie.set_global_opts(legend_opts=opts.LegendOpts(is_show=False)) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")) pie_html = pie.render_embed('template.html', env) return pie_html
def pie_radius_chart(data_pie): c = Pie() c.add(series_name='類別', data_pair=data_pie, radius=['40%', '75%']) c.set_global_opts(title_opts=opts.TitleOpts(title='各種類占比'), legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%')) c.set_series_opts(tooltip_opts=opts.TooltipOpts( trigger='item', formatter='{a} <br/> {b}:{c} ({d}%)'), label_opts=opts.LabelOpts(formatter="{b}:{c}%")) return c
def pie_position(): obj_pie = Pie() # center=["35%", "50%"] # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标 # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度 obj_pie.add("",[list(z) for z in zip(Faker.choose(), Faker.values())],center=["35%", "50%"]) obj_pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) obj_pie.set_global_opts( title_opts=opts.TitleOpts(title="Pie-设置位置",subtitle ="副标题"), legend_opts=opts.LegendOpts(pos_left="15%"), ) return obj_pie
def data_analysis(self): from pyecharts import options as opts # 导入包 from pyecharts.charts import Pie from pyecharts.render import make_snapshot c = Pie() # 绘制饼状图 c.add( "", [list(z) for z in zip(self.location_name, self.location_times)], radius=["40%", "75%"], # 内半径和外半径占比 ) c.set_global_opts(title_opts=opts.TitleOpts(title="壁纸拍摄地址分布图"),) c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) c.render('壁纸拍摄地址分布图.html')
def pie_charts() -> Pie: # 创建实例对象 pie = Pie(init_opts=opts.InitOpts(width='1000px', height='600px')) # 添加数据 pie.add(series_name="访问来源", data_pair=data_pie) # 设置全局项 pie.set_global_opts(title_opts=opts.TitleOpts( title="课程不同的来源销售分析", pos_left='center', pos_top=20)) #设置每项数据占比 pie.set_series_opts(tooltip_opts=opts.TooltipOpts( trigger='item', formatter="{a} <br/> {b}:{c} ({d}%)")) return pie
def pieChart(df): def randomcolor(kind): colors = [] for i in range(kind): #colArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F','G','H','I','K','L','M','N'] colArr = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ] color = '' for i in range(6): color += colArr[random.randint(0, 14)] colors.append('#' + color) return colors all_columns = df.columns type_of_plot = st.selectbox("Select Type of Plot", ["PIE1", "PIE2", "PIE3"]) columns_to_plot = st.selectbox("Select 1 column", all_columns, key='a') columns_to_plot1 = st.selectbox("Select 1 column", all_columns, key='b') if st.button("Generate Plot"): #st.success("Generating Customizable Plot of {} for {}".format(type_of_plot)) if type_of_plot == 'PIE1': cje = df[columns_to_plot].tolist() other_var = df[columns_to_plot1].tolist() color_series = randomcolor(len(cje)) pie = Pie() pie.add('', [list(z) for z in zip(cje, other_var)], radius=['30%', '135%'], center=['50%', '65%'], rosetype='area') pie.set_global_opts(title_opts=opts.TitleOpts( title='Population Generale des 20 CJE de Montreal'), legend_opts=opts.LegendOpts(is_show=False), toolbox_opts=opts.ToolboxOpts()) pie.set_series_opts( label_opts=opts.LabelOpts(is_show=True, position='inside', font_size=12, formatter='{b}:{c}', font_style='italic', font_weight='bold', font_family='Microsoft YaHei')) pie.set_colors(color_series) return pie
def pizza(info, componente, metrica="%", temaEscuro=False): if (temaEscuro): pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) else: pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE)) pie.add(series_name=componente, data_pair=info) pie.set_global_opts(title_opts=opts.TitleOpts(title="Média de uso de " + componente)) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} " + metrica)) make_snapshot(driver, pie.render("chart.html"), "chart.png") abrirGrafico() return 0
def pyechart_Pie_plot(self, filedata, para): from pyecharts.charts import Pie file_name = '南丁格尔玫瑰图.html' path_plotly = self.path_dir_plotly_html + os.sep + file_name # 文件路径,前面是文件夹后面是文件名 costumeTheme = self.themedict[para['theme']] # ----------------------------------------------------------------------- # 准备数据 df = pd.read_excel(filedata, sheet_name='sheet1') # # 提取数据 v = df['provinces'].values.tolist() d = df['num'].values.tolist() color_series = df['color_series'].values.tolist() # 降序排序 df.sort_values(by='num', ascending=False, inplace=True) # 实例化Pie类 pie1 = Pie(init_opts=opts.InitOpts( theme=costumeTheme, width=para['width'], height=para['height'])) # 设置颜色 pie1.set_colors(color_series) # 添加数据,设置饼图的半径,是否展示成南丁格尔图 pie1.add("", [list(z) for z in zip(v, d)], radius=["10%", "135%"], center=["50%", "65%"], rosetype="area") # 设置全局配置项 pie1.set_global_opts( title_opts=opts.TitleOpts(title=para["title"], subtitle=para["subtitle"]), toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts( background_color="white"))) #visualmap_opts=opts.VisualMapOpts(), ) # 设置系列配置项 pie1.set_series_opts( label_opts=opts.LabelOpts( is_show=True, position="inside", font_size=12, formatter="{b}:{c}天", font_style="normal", # css的格式 font_weight="normal", font_family="宋体"), ) # 生成html文档 pie1.render(path_plotly) return path_plotly # 返回该HTML文件路径
def draw(list1, list2): pie = Pie() pie.add("", list(zip(list1, list2))) pie.set_global_opts( title_opts=opts.TitleOpts(title="消费者购买的HUAWEIP30颜色图例"), #标题 legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="4%"), ) pie.set_series_opts( label_opts=opts.LabelOpts(formatter="{b}: {c}")) #图例显示(颜色+人数),例:亮黑色:46 pie.set_colors( ["lightblue", "black", "turquoise", "orangered", "lightpink"]) pie.render(desktop + "\\jd.huaweiP30.html") return True
def gender_pie(data): gender_list = [] for i, j in enumerate(data['gender'].value_counts()): if i == 0: i = '未知' elif i == 1: i = '男' else: i = '女' gender_list.append([i, j]) pie = Pie() pie.add("", gender_list) pie.set_global_opts(title_opts=opts.TitleOpts(title="性别分布")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie.render("性别分布.html")