"""
author:魏振东
date:20200303
func:微信好友性别可视化-饼状图
"""
from pyecharts.charts import Pie
from pyecharts import options as opts
import csv# 读取csv文件,并把性别信息读取出来
def getSex(filename):lstsex = []with open(filename,'r') as f:reader =csv.reader(f)for i in reader:lstsex.append(i[24])return lstsex# pie可视化
def VisualSexpyechart(lstsex):sex = dict()for f in lstsex[1:]:if f =='1':sex['man'] = sex.get('man',0)+1elif f == '2':sex['women'] = sex.get('women',0)+1else:sex['unknown'] = sex.get('unknown',0)+1total = len(lstsex[1:])if sex['man']>sex['women']:print("你很受大哥哥们的欢迎!男生人数比女生人数多{0}".format(sex['man']-sex['women']))elif sex['man']<sex['women']:print("你很受小姐姐们的欢迎!男生人数比女生人数多{0}".format(sex['women'] - sex['man']))else:print("男女通杀!")attr = ['男性好友','女性好友','未知性别']value = [sex['man'],sex['women'],sex['unknown']]# 图表初始化配置"""class InitOpts(# 图表画布宽度,css 长度单位。width: str = "900px",# 图表画布高度,css 长度单位。height: str = "500px",# 图表 ID,图表唯一标识,用于在多图表时区分。chart_id: Optional[str] = None,# 渲染风格,可选 "canvas", "svg"# # 参考 `全局变量` 章节renderer: str = RenderType.CANVAS,# 网页标题page_title: str = "Awesome-pyecharts",# 图表主题theme: str = "white",# 图表背景颜色bg_color: Optional[str] = None,# 远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/"# 参考 `全局变量` 章节js_host: str = "",# 画图动画初始化配置,参考 `global_options.AnimationOpts`animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
)"""init_opts = opts.InitOpts(page_title="微信好友性别比例")pie = Pie(init_opts=init_opts)# 标题配置"""class TitleOpts(# 主标题文本,支持使用 \n 换行。title: Optional[str] = None,# 主标题跳转 URL 链接title_link: Optional[str] = None,# 主标题跳转链接方式# 默认值是: blank# 可选参数: 'self', 'blank'# 'self' 当前窗口打开; 'blank' 新窗口打开title_target: Optional[str] = None,# 副标题文本,支持使用 \n 换行。subtitle: Optional[str] = None,# 副标题跳转 URL 链接subtitle_link: Optional[str] = None,# 副标题跳转链接方式# 默认值是: blank# 可选参数: 'self', 'blank'# 'self' 当前窗口打开; 'blank' 新窗口打开subtitle_target: Optional[str] = None,# title 组件离容器左侧的距离。# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'left', 'center', 'right'。# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。pos_left: Optional[str] = None,# title 组件离容器右侧的距离。# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_right: Optional[str] = None,# title 组件离容器上侧的距离。# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'top', 'middle', 'bottom'。# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。pos_top: Optional[str] = None,# title 组件离容器下侧的距离。# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_bottom: Optional[str] = None,# 标题内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。# // 设置内边距为 5# padding: 5# // 设置上下的内边距为 5,左右的内边距为 10# padding: [5, 10]# // 分别设置四个方向的内边距# padding: [#     5,  // 上#     10, // 右#     5,  // 下#     10, // 左# ]padding: Union[Sequence, Numeric] = 5,# 主副标题之间的间距。item_gap: Numeric = 10,# 主标题字体样式配置项,参考 `series_options.TextStyleOpts`title_textstyle_opts: Union[TextStyleOpts, dict, None] = None,# 副标题字体样式配置项,参考 `series_options.TextStyleOpts`subtitle_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)"""title = opts.TitleOpts(title="微信好友性别比例",subtitle="好友总人数{0}".format(total),pos_left='center')# 图例配置"""class LegendOpts(# 图例的类型。可选值:# 'plain':普通图例。缺省就是普通图例。# 'scroll':可滚动翻页的图例。当图例数量较多时可以使用。type_: Optional[str] = None,# 图例选择的模式,控制是否可以通过点击图例改变系列的显示状态。默认开启图例选择,可以设成 false 关闭# 除此之外也可以设成 'single' 或者 'multiple' 使用单选或者多选模式。selected_mode: Union[str, bool, None] = None,# 是否显示图例组件is_show: bool = True,# 图例组件离容器左侧的距离。# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'left', 'center', 'right'。# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。pos_left: Union[str, Numeric, None] = None,# 图例组件离容器右侧的距离。# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_right: Union[str, Numeric, None] = None,# 图例组件离容器上侧的距离。# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'top', 'middle', 'bottom'。# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。pos_top: Union[str, Numeric, None] = None,# 图例组件离容器下侧的距离。# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_bottom: Union[str, Numeric, None] = None,# 图例列表的布局朝向。可选:'horizontal', 'vertical'orient: Optional[str] = None,# 图例标记和文本的对齐。默认自动(auto)# 根据组件的位置和 orient 决定# 当组件的 left 值为 'right' 以及纵向布局(orient 为 'vertical')的时候为右对齐,即为 'right'。# 可选参数: `auto`, `left`, `right`align: Optional[str] = None,# 图例内边距,单位px,默认各方向内边距为5padding: int = 5,# 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。# 默认间隔为 10item_gap: int = 10,# 图例标记的图形宽度。默认宽度为 25item_width: int = 25,# 图例标记的图形高度。默认高度为 14item_height: int = 14,# 图例关闭时的颜色。默认是 #cccinactive_color: Optional[str] = None,# 图例组件字体样式,参考 `series_options.TextStyleOpts`textstyle_opts: Union[TextStyleOpts, dict, None] = None,# 图例项的 icon。# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。# 可以通过 'path://' 将图标设置为任意的矢量路径。legend_icon: Optional[str] = None,
)"""legend_opts = opts.LegendOpts(orient="vertical",pos_top="20%",pos_left="15%")# 工具箱配置"""class ToolBoxFeatureOpts(# 保存为图片save_as_image: Optional[dict] = None,# 配置项还原restore: Optional[dict] = None,# 数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新data_view: Optional[dict] = None,# 数据区域缩放。目前只支持直角坐标系的缩放data_zoom: Optional[dict] = None,
)"""# feature = opts.ToolBoxFeatureOpts(save_as_image=True, restore=True, data_view=True, data_zoom=True)# 工具箱配置"""class ToolboxOpts(# 是否显示工具栏组件is_show: bool = True,# 工具栏 icon 的布局朝向。# 可选:'horizontal', 'vertical'orient: str = "horizontal",# 工具栏组件离容器左侧的距离。# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'left', 'center', 'right'。# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐pos_left: str = "80%",# 工具栏组件离容器右侧的距离。# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_right: Optional[str] = None,# 工具栏组件离容器上侧的距离。# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,# 也可以是 'top', 'middle', 'bottom'。# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。pos_top: Optional[str] = None,# 工具栏组件离容器下侧的距离。# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。pos_bottom: Optional[str] = None,# 各工具配置项,参考 `global_options.ToolBoxFeatureOpts`feature: Union[ToolBoxFeatureOpts, dict] = ToolBoxFeatureOpts(),
)"""toolbox_opts = opts.ToolboxOpts(orient="vertical",pos_top="35%",pos_right="15%")pie.set_global_opts(title_opts=title,legend_opts=legend_opts,toolbox_opts = toolbox_opts)# 标签配置项"""class LabelOpts(# 是否显示标签。is_show: bool = True,# 标签的位置。可选# 'top','left','right','bottom','inside','insideLeft','insideRight'# 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'# 'insideTopRight','insideBottomRight'position: Union[str, Sequence] = "top",# 文字的颜色。# 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。color: Optional[str] = None,# 文字的字体大小font_size: Numeric = 12,# 文字字体的风格,可选:# 'normal','italic','oblique'font_style: Optional[str] = None,# 文字字体的粗细,可选:# 'normal','bold','bolder','lighter'font_weight: Optional[str] = None,# 文字的字体系列# 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...font_family: Optional[str] = None,# 标签旋转。从 -90 度到 90 度。正值是逆时针。rotate: Optional[Numeric] = None,# 刻度标签与轴线之间的距离。margin: Optional[Numeric] = 8,# 坐标轴刻度标签的显示间隔,在类目轴中有效。# 默认会采用标签不重叠的策略间隔显示标签。# 可以设置成 0 强制显示所有标签。# 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。# 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:# (index:number, value: string) => boolean# 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。interval: Union[Numeric, str, None]= None,# 文字水平对齐方式,默认自动。可选:# 'left','center','right'horizontal_align: Optional[str] = None,# 文字垂直对齐方式,默认自动。可选:# 'top','middle','bottom'vertical_align: Optional[str] = None,# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。# 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。 # 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。 # 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:# 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)# 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)# 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)# 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)# 示例:formatter: '{b}: {@score}'# # 回调函数,回调函数格式:# (params: Object|Array) => string# 参数 params 是 formatter 需要的单个数据集。格式如下:# {#    componentType: 'series',#    // 系列类型#    seriesType: string,#    // 系列在传入的 option.series 中的 index#    seriesIndex: number,#    // 系列名称#    seriesName: string,#    // 数据名,类目名#    name: string,#    // 数据在传入的 data 数组中的 index#    dataIndex: number,#    // 传入的原始数据项#    data: Object,#    // 传入的数据值#    value: number|Array,#    // 数据图形的颜色#    color: string,# }formatter: Optional[str] = None,# 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果# 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BErich: Optional[dict] = None,
)""""""def add(# 系列名称,用于 tooltip 的显示,legend 的图例筛选。series_name: str,# 系列数据项,格式为 [(key1, value1), (key2, value2)]data_pair: Sequence,# 系列 label 颜色color: Optional[str] = None,# 饼图的半径,数组的第一项是内半径,第二项是外半径# 默认设置成百分比,相对于容器高宽中较小的一项的一半radius: Optional[Sequence] = None,# 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标# 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度center: Optional[Sequence] = None,# 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。# radius:扇区圆心角展现数据的百分比,半径展现数据的大小# area:所有扇区圆心角相同,仅通过半径展现数据大小rosetype: Optional[str] = None,# 饼图的扇区是否是顺时针排布。is_clockwise: bool = True,# 标签配置项,参考 `series_options.LabelOpts`label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),# 提示框组件配置项,参考 `series_options.TooltipOpts`tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,# 图元样式配置项,参考 `series_options.ItemStyleOpts`itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)"""pie.add("",[list(z) for z in zip(attr,value)],radius=[30, 75],center=['50%','50%'],rosetype ="area",label_opts=opts.LabelOpts(position="outside",formatter="{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,},},),)pie.render('微信好友性别比例.html')VisualSexpyechart(getSex("data/wudifriendsalldata.csv"))

"""
author:魏振东
date:20200303
func:数据可视化-饼状图
"""
from pyecharts.charts import Pie
from pyecharts import options as opts
import xlrd# 读取excel文件,并把性别信息读取出来
def getSex(filename, num):lstsex=[]data = xlrd.open_workbook(filename, 'r', encoding_override='utf-8')table = data.sheets()[num]for i in range(1,table.nrows) :lstsex.append(table.row_values(i)[5])return lstsexdef VisualSexpyechart(lstsex171,lstsex172):sex = dict()s=0for f in lstsex171:if f == '男':sex["男"] = sex.get("男", 0) + 1elif f == '女':sex["女"] = sex.get("女", 0) + 1# 班级总人数total171 = len(lstsex171)attr = ['171男生', '171女生']value = [sex["男"], sex["女"]]list171 = [list(z) for z in zip(attr,value)]sex1 = dict()for f in lstsex172:if f == '男':sex1["男"] = sex1.get("男", 0) + 1elif f == '女':sex1["女"] = sex1.get("女", 0) + 1# 班级总人数total172 = len(lstsex172)attr1 = ['172男生', '172女生']value1 = [sex1["男"], sex1["女"]]list172 = [list(z) for z in zip(attr1,value1)]# 图表初始化配置init_opts = opts.InitOpts(page_title="171-172男女比例饼状图")pie = Pie(init_opts=init_opts)# 标题配置title = opts.TitleOpts(title="171-172男女比例饼状图",subtitle="171班总人数{0}  172班总人数{1}".format(total171,total172),pos_left='center')# 图例配置legend_opts = opts.LegendOpts(orient="vertical",pos_top="20%",pos_left="15%")# 工具箱配置# feature = opts.ToolBoxFeatureOpts(save_as_image=True, restore=True, data_view=True, data_zoom=True)# 工具箱配置toolbox_opts = opts.ToolboxOpts(orient="vertical",pos_top="25%",pos_right="15%")pie.set_global_opts(title_opts=title,legend_opts=legend_opts,toolbox_opts=toolbox_opts)# 标签配置项pie.add("",list171,radius=[0, 75],center=['50%', '30%'],rosetype="radius",label_opts=opts.LabelOpts(formatter="{b}:{c}  "))pie.add("",list172,radius=[30, 75],center=['50%', '70%'],rosetype="area",label_opts=opts.LabelOpts(position="outside",formatter="{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,},},),)pie.render('171-172男女比例饼状图.html')VisualSexpyechart(getSex('../data/软件17学生详细名单.xls',0),getSex('../data/软件17学生详细名单.xls',1))

python pyecharts 数据可视化 饼状图绘制相关推荐

  1. python饼状图教程_Python数据可视化:饼状图的实例讲解

    使用python实现论文里面的饼状图: 原图: python代码实现: # # 饼状图 # plot.figure(figsize=(8,8)) labels = [u'Canteen', u'Sup ...

  2. 数据可视化--饼状图

    数据可视化–饼状图 功能:模拟从后台获取数据,将数据绘制成饼状图,效果如下: <canvas height="500px" width="800px"&g ...

  3. 用python把数据画成饼状图_Python学习第92课——数据可视化之饼状图绘制

    [每天几分钟,从零入门python编程的世界!] 假如一个行业只有ABCD四个公司,我们想要用图表展现,它们各自每年的生产总额,占整个行业的比例是多少,这时我们用饼状图(pie chart)更好. 假 ...

  4. ECharts数据可视化饼状图(环形图-进度半圆形)

    销售进度 (quarter) -饼状图 实现步骤: 寻找官方的类似示例,给予分析,引入到HTML页面中 按照需求来定制它. 链接: 环形图. 完整js代码 // 销售模块 饼形图 半圆形 设置方式 ( ...

  5. 利用python决策树分析iris数据及树状图绘制

    利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据 ...

  6. Python pyecharts数据可视化

    Python pyecharts数据可视化--绘制精美图表 一.数据可视化 1.pyecharts介绍 2.初入了解 (1).快速上手 (2).简单的配置项介绍 3.案例实战 (1).柱状图Bar ( ...

  7. Python使用matplotlib可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Dendrogram)

    Python使用matplotlib可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Dendrogram) 目录

  8. 淘宝商品信息爬取,实现词云,并进行饼状图绘制及效果图

    对应json文件地址:https://blog.csdn.net/nicholas_K/article/details/86094530 1. 获取了淘宝手机商品的评论和追评 2. 对淘宝评论进行了词 ...

  9. H5画布 canvas(一)canvas简介、绘制圆形矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

  10. H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

最新文章

  1. Php 表单转json,form转json实现方法
  2. sizeof运算求结构体大小
  3. jQuery UI在Server 2008 IE8下DatePicker问题修复
  4. C指针原理(41)-递归(2)
  5. ***教程十:数据库注入(上)
  6. java none怎么用tomcat_JavaWeb学习——在Eclipse里使用Tomcat
  7. java多线程编程_Java多线程编程
  8. 微信公众平台运营指导
  9. 围观京东云,您有一份区块链技术礼包待查收!
  10. textarea中输入多个空格或者换行时只显示一个空格的解决办法
  11. 如何查看android虚拟机的目录及文件
  12. 2022-07-17 mysql使用的flex/yacc语法练习
  13. DXperience 7.1.1
  14. H5分享带缩略图,描述,微信内分享到好友,朋友圈等
  15. 微信公众号粉丝迁移代办最新流程
  16. UCan技术开放日|告别转型“焦虑”,从云原生开始
  17. 【Android 源码学习】SharedPreferences 源码学习
  18. 开启Fluter基础之旅四-------表格、动画、手势
  19. 统计方形(NOIP1997)
  20. 计算机专业期末背书,每到期末,我就后悔读了这个专业

热门文章

  1. 解决“你没有权限访问,请与网络管理员联系”
  2. 金庸走过,留给马云和阿里巴巴一个“江湖”
  3. 蓝桥杯 图形排版
  4. 数字图像处理实验四对比度增强
  5. 肠道菌群失调与炎症性肠病的关联
  6. [SSL_CHX][2021-8-19]空瓶换饮料
  7. reid 比赛(全国人工智能大赛)
  8. 修改服务器的ip地址的命令,使用命令提示符更改IP地址和DNS服务器 | MOS86
  9. Fullcalendar 日历控件的基本使用
  10. 餐厅叫号语音包_医院叫号系统(需自行下载语音包)