文章目录
- 专栏导读
- 1. 基础饼图
- add函数
- 简单案例
- 改变颜色
- 2. 百分比饼图
- 3. 环形饼图
- 4. 玫瑰饼图
- 5. 内嵌环图
- 6. 多个饼图
专栏导读
🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
- 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
- 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
1. 基础饼图
add函数
Pie.add()
方法是Pyecharts模块中用于向饼图中添加数据的方法。该方法的所有参数如下:
add(series_name: str = "",data_pair: Union[List[Tuple], List[dict]] = None,*,radius: Optional[Sequence] = None,center: Optional[Sequence] = None,rosetype: Optional[str] = None,label_opts: Union[opts.LabelOpts, dict, None] = None,tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,encode: Optional[dict] = None,sort_: Optional[str] = None,selected_mode: Optional[str] = None,selected_offset: Optional[int] = None,clockwise: Optional[bool] = None,start_angle: Optional[int] = None,min_angle: Optional[int] = None,rose_area_color: Optional[str] = None,label_line_opts: Union[opts.LabelLineOpts, dict, None] = None,zlevel: Optional[int] = None,z: Optional[int] = None,
) -> "Pie"
参数说明:
series_name
:(str)系列名称,用于区分不同的系列数据。默认为""。data_pair
:(Union[List[Tuple], List[dict]])数据对,数据对是一个元组或字典,包含两个元素:名称和值。例如:[(“A”, 10), (“B”, 20), (“C”, 30)]或[{“name”: “A”, “value”: 10}, {“name”: “B”, “value”: 20}, {“name”: “C”, “value”: 30}]。radius
:(Optional[Sequence])饼图的半径,可以设置为一个列表,包含内半径和外半径。例如:[“40%”, “75%”]。center
:(Optional[Sequence])饼图的中心位置,可以设置为一个列表,包含横坐标和纵坐标。例如:[“50%”, “50%”]。rosetype
:(Optional[str])玫瑰图类型,可选值为"radius"和"area"。默认为None。label_opts
:(Union[opts.LabelOpts, dict, None])标签配置项,用于设置标签的样式、格式等。默认为None。tooltip_opts
:(Union[opts.TooltipOpts, dict, None])提示框配置项,用于设置提示框的样式、格式等。默认为None。itemstyle_opts
:(Union[opts.ItemStyleOpts, dict, None])图形样式配置项,用于设置饼图的颜色、阴影等。默认为None。encode
:(Optional[dict])数据编码,用于指定数据项和维度的对应关系。例如:{“itemName”: 0, “value”: 1}。sort_
:(Optional[str])数据排序方式,可选值为"ascending"和"descending"。默认为None。selected_mode
:(Optional[str])选中模式,可选值为"single"和"multiple"。默认为None。selected_offset
:(Optional[int])选中偏移量,用于设置选中的图形偏移的像素值。默认为None。clockwise
:(Optional[bool])饼图是否顺时针排列。默认为None。start_angle
:(Optional[int])饼图的起始角度。默认为None。min_angle
:(Optional[int])饼图的最小角度。默认为None。rose_area_color
:(Optional[str])玫瑰图区域颜色。默认为None。label_line_opts
:(Union[opts.LabelLineOpts, dict, None])标签线配置项,用于设置标签线的样式、格式等。默认为None。zlevel
:(Optional[int])图形所在图层。默认为None。z
:(Optional[int])图形的 z 坐标。默认为None。
以上代码为Pie.add()
方法的所有参数示例。在实际使用中,可以根据需要选择设置相应的参数。
简单案例
下面是使用Pyecharts链式写法绘制基础饼图的代码和说明介绍:
from pyecharts import options as opts
from pyecharts.charts import Pie# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]# 使用链式写法创建Pie实例,添加数据并设置全局属性、系列属性
pie = (Pie().add("", data).set_global_opts(title_opts=opts.TitleOpts(title="基础饼图")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))# 在jupyter notebook输出
pie.render_notebook()# 在浏览器中显示图表
pie.render("basic_pie.html")
代码说明:
- 导入Pyecharts的options和Pie模块。
- 构造数据,这里用了一个列表,每个元素是一个元组,第一个元素是标签,第二个元素是数值。
- 使用链式写法创建Pie实例,并调用
add()
方法添加数据,第一个参数是饼图的名称,第二个参数是数据列表。 - 继续使用链式写法调用
set_global_opts()
方法,设置全局属性,这里设置了标题。 - 继续使用链式写法调用
set_series_opts()
方法,设置系列属性,这里设置了标签格式。 - 调用
render_notebook
方法,在jupyter notebook输出
运行结果:
改变颜色
在Pyecharts中,set_colors()
函数可以用于设置图表中的颜色,可以传入一个颜色列表,每个元素是一个字符串,表示一个颜色值。下面是一些常用的颜色值及其对应的字符串:
- 红色:
"#c23531"
- 绿色:
"#61a0a8"
- 蓝色:
"#2f4554"
- 橙色:
"#d48265"
- 紫色:
"#91c7ae"
- 黄色:
"#749f83"
- 粉色:
"#ca8622"
- 深红色:
"#bda29a"
- 浅蓝色:
"#6e7074"
- 深蓝色:
"#546570"
- 浅绿色:
"#c4ccd3"
- 深绿色:
"#4b565b"
当然,还有很多其他的颜色值可以使用,可以根据需要自行搜索。在Pyecharts中,可以使用set_colors()
函数将这些颜色值传入图表中,或者使用JS代码自定义颜色。
调用set_colors()方法,设置颜色,这里使用了五种颜色:
from pyecharts import options as opts
from pyecharts.charts import Pie# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]# 使用链式写法创建Pie实例,添加数据并设置全局属性、系列属性
pie = (Pie().add("", data).set_colors(["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae"]) # 修改颜色.set_global_opts(title_opts=opts.TitleOpts(title="基础饼图")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))# 在jupyter notebook输出
pie.render_notebook()
运行结果:
2. 百分比饼图
下面是使用Pyecharts链式写法绘制百分比饼图并在jupyter notebook中输出的代码和说明介绍
from pyecharts import options as opts
from pyecharts.charts import Pie# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]# 绘制饼图
pie = (Pie().add("", data).set_global_opts(title_opts=opts.TitleOpts(title="百分比饼图")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")))# 在jupyter notebook输出
pie.render_notebook()
代码说明:
导入Pyecharts的options和Pie模块。构造数据,这里用了一个列表,每个元素是一个元组,第一个元素是标签,第二个元素是数值。创建Pie实例,使用链式写法设置图表的各种属性。.add("", data)表示将数据添加到饼图中,set_global_opts()设置全局属性,这里设置了标题,set_series_opts()设置系列属性,这里设置了标签格式。调用render_notebook()方法,在jupyter notebook中输出饼图。
运行结果:
3. 环形饼图
通过在add
函数中设置radius设置饼图内圈和外圈的大小比例,绘制环形饼图:
from pyecharts import options as opts
from pyecharts.charts import Pie# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]# 绘制饼图
pie = (Pie().add("", data, radius=["15%", "50%"]) # 设置饼图内圈和外圈的大小比例.set_global_opts(title_opts=opts.TitleOpts(title="环形饼图")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")))# 在jupyter notebook输出
pie.render_notebook()
运行结果:
4. 玫瑰饼图
下面是使用Pyecharts链式写法绘制玫瑰饼图并在jupyter notebook中输出的示例代码:
from pyecharts.charts import Pie
from pyecharts.options import InitOpts, TitleOpts, LegendOpts, ToolboxOpts, LabelOpts# 初始化Pie对象
pie = Pie(init_opts=InitOpts(width='800px', height='400px'))# 添加数据
data = [('类别1', 15), ('类别2', 20), ('类别3', 10), ('类别4', 5), ('类别5', 5), ('类别6', 5)]
pie.add(series_name='', data_pair=data, radius=['30%', '70%'], rosetype='radius')# 设置全局配置项
pie.set_global_opts(title_opts=TitleOpts(title='玫瑰饼图示例'),legend_opts=LegendOpts(is_show=True),toolbox_opts=ToolboxOpts(is_show=True),)# 设置系列配置项
pie.set_series_opts(label_opts=LabelOpts(formatter="{b}: {c} ({d}%)"))# 输出到jupyter notebook
pie.render_notebook()
代码说明:
-
首先,我们导入需要使用的类和模块:Pie、InitOpts、TitleOpts、LegendOpts、ToolboxOpts和LabelOpts。
-
然后,我们初始化一个Pie对象,并设置图表的宽度和高度。
-
接着,我们添加数据。这里我们使用一个元组列表来表示数据,元组的第一个元素是类别名称,第二个元素是类别所占比例。
-
我们设置全局配置项,包括标题、图例和工具栏等。
-
我们设置系列配置项,包括标签格式化和玫瑰图的类型等。
-
最后,我们使用render_notebook()方法将图表输出到jupyter notebook中。
运行代码后,你应该可以在jupyter notebook中看到绘制的玫瑰饼图:
5. 内嵌环图
内嵌环图是一种可以在一个圆环内部再嵌套一个圆环的饼图,通常用于展示两层数据之间的关系:
import pyecharts.options as opts
from pyecharts.charts import Pie# 定义内环数据
inner_x_data = ["直达", "营销广告", "搜索引擎"]
inner_y_data = [335, 679, 1548]
inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]# 定义外环数据
outer_x_data = ["直达", "营销广告", "搜索引擎", "邮件营销", "联盟广告", "视频广告", "百度", "谷歌", "必应", "其他"]
outer_y_data = [335, 310, 234, 135, 1048, 251, 147, 102]
outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)]# 创建Pie对象
pie = (Pie(init_opts=opts.InitOpts(width="800px", height="800px")) # 设置图表大小.add(series_name="访问来源", # 设置系列名称data_pair=inner_data_pair, # 设置内环数据radius=[0, "30%"], # 设置内外环半径label_opts=opts.LabelOpts(position="inner"), # 设置标签位置).add(series_name="访问来源", # 设置系列名称radius=["40%", "55%"], # 设置内外环半径data_pair=outer_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,},},),).set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")) # 设置全局配置.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)") # 设置提示框格式)
)# 输出到jupyter notebook
pie.render_notebook()
运行结果:
6. 多个饼图
本代码使用了 Pyecharts 库中的 Pie 类,绘制了一个多饼图的基本示例,展示了不同类型电影的占比情况。
import pyecharts.options as opts
from pyecharts.charts import Pie
from pyecharts.globals import ThemeTypec = (Pie().add("",[list(z) for z in zip(["剧情", "其他"], [30, 70])],center=["20%", "30%"],radius=[60, 80],label_opts=opts.LabelOpts(formatter="{b}: {d}%") # 给每个饼图加上百分比).add("",[list(z) for z in zip(["奇幻", "其他"], [40, 60])],center=["55%", "30%"],radius=[60, 80],label_opts=opts.LabelOpts(formatter="{b}: {d}%")).add("",[list(z) for z in zip(["爱情", "其他"], [24, 76])],center=["20%", "70%"],radius=[60, 80],label_opts=opts.LabelOpts(formatter="{b}: {d}%")).add("",[list(z) for z in zip(["惊悚", "其他"], [11, 89])],center=["55%", "70%"],radius=[60, 80],label_opts=opts.LabelOpts(formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="Pie-多饼图基本示例"),legend_opts=opts.LegendOpts(type_="scroll", pos_top="20%", pos_left="80%", orient="vertical"),)
)c.render_notebook()
具体实现过程如下:
导入所需库:pyecharts.options、pyecharts.charts 和 pyecharts.globals。创建一个 Pie 类实例。使用 add() 方法添加四个饼图,分别表示剧情、奇幻、爱情和惊悚类型电影的占比情况。在每个饼图中使用 label_opts 参数的 formatter 属性,给每个饼图加上百分比的标签。使用 set_global_opts() 方法设置全局参数,包括标题和图例的位置和样式。最后使用 render_notebook() 方法将图表渲染到 Jupyter Notebook 中。
需要注意的是,饼图的位置和大小可以通过 center 和 radius 参数来设置,每个饼图的数据以列表形式传入,每个元素包含两个值,分别表示该数据的名称和数值。在本示例中,其他类型电影的占比是通过剩余部分的方式计算得出的。
运行结果: