本文章内容仅供参考,思维导图如下:
一,Pycharts简介
1,Pyecharts的由来
(1)Echarts是一个由百度开源的基于js语言的数据可视化框架,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。
(2)由于python在数据分析领域的活跃,一个开发团队将echarts库移植到python中,命名为“pyecharts”。
(3)相较于matplotlib而言,pyecharts库绘制的图形种类更多,样式更精美、丰富。
2,官网和社区
Pyecharts团队提供了官网和社区。
其中官网有Pyecharts的使用文档,社区包含各种图形的项目案例代码和演示。
官网:pyecharts - A Python Echarts Plotting Library built with love.
社区:Document
3,Pyecharts的图形样例
(1)带有滑动条的柱形图
#导入模块
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("超市A", Faker.days_values, color=Faker.rand_color())
.set_global_opts(
title_opts=opts.TitleOpts(title="带有滑动条的柱形图"),
datazoom_opts=opts.DataZoomOpts(),
)
.render("带有滑动条的柱形图.html")
)
结果如下:
(2)带有时间轴的饼图
#导入模块
from pyecharts import options as opts
from pyecharts.charts import Pie, Timeline
from pyecharts.faker import Faker
attr = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
pie= ( ##饼图
Pie()
.add(
"某某",
[list(z) for z in zip(attr, Faker.values())],
rosetype="radius",
radius=["30%", "55%"],
)
.set_global_opts(title_opts=opts.TitleOpts("某某{}年".format(i)))
)
tl.add(pie, "{}年".format(i))
tl.render("带有时间轴的饼图.html")
结果如下:
(3)热力地图
#导入模块
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType
c = ( //热力图
Geo()
.add_schema(maptype="广东")
.add(
"geo",
[list(z) for z in zip(Faker.guangdong_city, Faker.values())],
type_=ChartType.HEATMAP,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")
)
.render("geo_guangdong.html")
)
结果如下:
二,Pyecharts的基本用法
1,语法结构
c=(
Bar()
#每个图形由相应的类构成。
.add_xaxis(Faker.choose())
#图形对象的各种方法(如添加x轴数据)均可以采用换行链式编程方法。
.add_yaxis("A家店铺",Faker.values())
.add_yaxis("B家店铺",Faker.values())
#
.set_global_opts(title_opts=opts.TitleOpts(title="Bark-Mark(指定类型)"))
#全局配置项set_global_ops可以配置标题、坐标轴等通用的图形模块。
.set_series_opts(
#系列配置项set_series_opts可以配置和数据及图形相关的图表样式、文本样式、线条样式、标签样式。
label_opts=opts.LabelOpts(is_show=False),
#各子配置项中传入的对象均由Pyecharts中options包里定义好的类生成。
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max",name="最大值"),
opts.MarkPointItem(type_="min",name="最小值"),
opts.MarkPointItem(type_="avg",name="平均值"),
]
)
)
.render("bar_markpoint_tpye.html")
#代码的最后是图形渲染的方法,可以生成html文件,或是直接在jupyter中展示。
)
2,使用pyecharts的注意事项
(1)pyecharts 本质上
在做的事情就是将 Echarts 的配置项由 Python dict 序列化为 JSON 格式,所以 pyecharts 支持什么格式的数据类型取决于 JSON 支持什么数据类型。这也就意味着在你将数据传入到 pyecharts 的时候,需要自行将数据格式转换成上述 Python 原生的数据格式。
(2)使用数据分析
大都需要使用 numpy/pandas,但是 numpy 的 numpy.int64/numpy.int32/... 等数据类型并不继承自 Python.int。这就需要我们在使用Pyecharts画图之前要将数据类型转化为【int\float】类型。
(3)有两种数据类型转换为【int\float】类型数据的方法:
有两种将numpy.int64/numpy.int32/... 等数据类型转换为【int\float】类型数据的方法:
【1】、序列对象的 tolist() 方法: Series.tolist()
【不建议使用python自带的list函数来将序列转化成列表,这可能会无法实现元素数据类型的转换】
【2】、强制转换数据的类型,并重新生成一个列表对象:
# for int
[int(x)for x in your_numpy_array_or_something_else]
# for float
[float(x) for x in your_numpy_array_or_something_else]
# for str
[str(x) for x in your_numpy_array_or_something_else]
三,数据对比类图形
1,多重柱形图
(1)含义:即多个系列数据绘制的柱形图,不同系列的数据的图形用一种颜色表示。
基本语法:
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
c = (
Bar({"theme": ThemeType.MACARONS})
.add_xaxis(Faker.choose())
.add_yaxis("超市A", Faker.values())
.add_yaxis("超市B", Faker.values())
.set_global_opts(
title_opts={"text": "Bar-通过 dict 进行配置", "subtext": "举例结果图"}
)
.render("bar_dict.html")
)
图例:
官方社区链接:
Bar - Bar_base_dict_config - Document (pyecharts.org)
2,堆积柱形图
(1)基本语法
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), stack="stack1")
.add_yaxis("商家B", Faker.values(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(全部)"))
.render("bar_stack0.html")
)
结果:
3,条形图
(1)基本语法
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))
.render("bar_reversal_axis.html")
)
结果:
4,3D柱形图
(1)基本语法
Bar3D类创建3D柱形图对象
add方法添加数据:
(1)data参数中输入z轴数据(需要一个n*3形状的二维列表,n是柱体的个数)
(2)xaxis3d_opts 和 yaxis3d_opts分别输入x轴和y轴刻度值
官方社区链接:
Bar3d - Bar3d_punch_card - Document (pyecharts.org)
官方图:
5,环型饼图
(1)基本语法:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
c = (
Pie()
.add(
"",
[list(z) for z in zip(Faker.choose(), Faker.values())],
radius=["40%", "75%"],
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Pie-Radius"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_radius.html")
)
官方社区链接:
Pie - Pie_radius - Document (pyecharts.org)
官方图:
6,玫瑰图
(1)基本语法:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
v = Faker.choose()
c = (
Pie()
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["25%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=False),
)
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["75%", "50%"],
rosetype="area",
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
.render("pie_rosetype.html")
)
官方社区链接:
Pie - Pie_rosetype - Document (pyecharts.org)
官方图:
7,雷达图
(1)概念:
雷达图在显示各维度数据的对比情况的同时,还可以对全部维度的整体情况有一个直观的展示。
(1)基本语法:
import pyecharts.options as opts
from pyecharts.charts import Radar
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=radar
目前无法实现的功能:
1、雷达图周围的图例的 textStyle 暂时无法设置背景颜色
"""
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
(
Radar(init_opts=opts.InitOpts(bg_color="#CCCCCC"))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售(sales)", max_=6500),
opts.RadarIndicatorItem(name="管理(Administration)", max_=16000),
opts.RadarIndicatorItem(name="信息技术(Information Technology)", max_=30000),
opts.RadarIndicatorItem(name="客服(Customer Support)", max_=38000),
opts.RadarIndicatorItem(name="研发(Development)", max_=52000),
opts.RadarIndicatorItem(name="市场(Marketing)", max_=25000),
],
splitarea_opt=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add(
series_name="预算分配(Allocated Budget)",
data=v1,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
)
.add(
series_name="实际开销(Actual Spending)",
data=v2,
linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="基础雷达图"), legend_opts=opts.LegendOpts()
)
.render("basic_radar_chart.html")
)