Pyecharts-您的动态制图好伙伴!
提示:本身Pyecharts的讲解会非常的长,因为可以做的图就很多,我只是筛选了十二个我认为基础的数据图,更多的制图函数我会放在最后面的文章,还请自行了解。
请先看目录,以此来缩小查找的范围,如果该文章有些小错误,还请见谅......
Pyecharts能做什么?
- Bar(柱状图):用于创建柱状图
- Line(折线图):用于创建折线图
- Pie(饼图):用于创建饼图
- Scatter(散点图):用于创建散点图
- EffectScatter(带有涟漪效果的散点图):用于创建带有涟漪效果的散点图
- Kline(K线图):用于创建K线图,即股票行情图
- HeatMap(热力图):用于创建热力图
- Funnel(漏斗图):用于创建漏斗图
- Gauge(仪表盘):用于创建仪表盘样式的图表
- Geo(地理坐标系):用于在地理坐标系上绘制各种类型的地理数据,如地理分布、迁徙等
- Map(地理坐标系上的地区分布):与Geo类似,但主要针对中国及世界各国的省份、城市等进行可视化展示
- WordCloud(词云):以文字为主题,根据词频生成具有艺术性和创意性的词云图片
pyecharts的设计
pyecharts易于使用,基于Echarts框架,提供了一套用户友好、易于使用的Python API,用于创建多样化的交互式图表。而可视化效果和交互性更出色,不仅提供了各种数据可视化图表选择以及插件,而且支持通过JavaScript进行交互,可以方便地开发基于Python的web应用。
所以pyecharts则更加适合web应用开发和数据可视化展示,提供了各种插件和可视化组件,允许开发人员使用Python和JS编程方式进行交互式的数据可视化展示。
Pyecharts所有制图的基本函数
Bar(柱状图) | Bar() | add_xaxis() | add_yaxis() | set_global_opts() | render() |
Line(折线图) | Line() | add_xaxis() | add_yaxis() | set_global_opts() | render() |
Pie(饼图) | Pie() | add()(添加饼图数据) | set_global_opts() | render() | |
Scatter(散点图) | Scatter() | add_xaxis() | add_yaxis() | set_global_opts() | render() |
Kline(K线图) | Kline() | add_xaxis() | add_yaxis() | set_global_opts() | render() |
HeatMap(热力图) | HeatMap() | set_global_opts() | render() | ||
Funnel(漏斗图) | Funnel() | add() | set_global_opts() | render() | |
Gauge(仪表盘) | Gauge() | set_global_opts() | render() | ||
Map(地理图) | Map() | add() | set_global_opts() | render() | |
Geo(地理坐标系) | Geo() | add_schema() add_coordinate() | add_coordinate() set_series_options() | set_global_opts() | render() |
WordCloud(词云) | WordCloud() | add() | set_global_opts() | render() | |
EffectScatter(涟漪效果的散点图) | EffectScatter() | add_xaxis() | add_yaxis() | set_global_opts() (需设置visualmap_opts) | render() |
可以看到必须要的函数,最基础的一点就是创建图表,每一个不同的数据图都有自己函数,你可以理解为:一张空白的蓝图图纸
相同点都需要set_global_opts(),你可以理解为:在蓝图上制作相对应的框架
还有一个相同点则是需要rende(),如果你做了数据图,但是你又不去生成它,如同白做,你可以理解为:图纸画完了,去实现蓝图上的物品
上述是并未使用了add一类的函数,如果按照上方文字三步骤,你会得到一张只有基本框架的图,这种图并没有数据呈现。
Pyecharts所有制图过程(带参演示)
注明:下列基础代码欢迎自行调试,如果应用到其他博客网站,请标注原创作者!
现在进入了正片,如何制作基本框架,并传入值生成带有数据的数据图:
Pyecharts —— Bar(柱状图)
# 你需要import下列pyecharts,否则不会运行
from pyecharts import options as opts
from pyecharts.charts import Bar
# 创建柱状图实例
bar_chart = Bar()
# 添加数据和配置项
bar_chart.add_xaxis(["Category 1", "Category 2", "Category 3"]) # x轴数据
bar_chart.add_yaxis("Series 1", [10, 20, 30]) # y轴数据
# 设置全局配置项
bar_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Bar Chart"), # 图表标题
xaxis_opts=opts.AxisOpts(name="Category"), # x轴配置
yaxis_opts=opts.AxisOpts(name="Value"), # y轴配置
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
bar_chart.render("bar_chart.html")
Pyecharts——Line(折线图)
from pyecharts import options as opts
from pyecharts.charts import Line
# 创建折线图实例
line_chart = Line()
# 添加数据和配置项
line_chart.add_xaxis(["Category 1", "Category 2", "Category 3"]) # x轴数据
line_chart.add_yaxis("Series 1", [10, 20, 30]) # y轴数据
# 设置全局配置项
line_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Line Chart"), # 图表标题
xaxis_opts=opts.AxisOpts(name="Category"), # x轴配置
yaxis_opts=opts.AxisOpts(name="Value"), # y轴配置
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
line_chart.render("line_chart.html")
Pyecharts——Pie(饼图)
from pyecharts import options as opts
from pyecharts.charts import Pie
# 创建饼图实例
pie_chart = Pie()
# 添加数据和配置项
pie_chart.add("", [("Category 1", 10), ("Category 2", 20), ("Category 3", 30)]) # 数据格式为(name, value)
# 设置全局配置项
pie_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Pie Chart"), # 图表标题
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"), # 图例配置
)
# 设置系列配置项
pie_chart.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 标签格式化
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
pie_chart.render("pie_chart.html")
Pyecharts——Scatter(散点图)
散点图一般数据多会越好,散点图可以明显直观的看到分布情况
from pyecharts import options as opts
from pyecharts.charts import Scatter
# 创建散点图实例
scatter_chart = Scatter()
# 添加数据和配置项
scatter_chart.add_xaxis([1, 2, 3, 4, 5]) # x轴数据
scatter_chart.add_yaxis("Series 1", [10, 20, 30, 40, 50]) # y轴数据
# 设置全局配置项
scatter_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Scatter Chart"), # 图表标题
xaxis_opts=opts.AxisOpts(name="X"), # x轴配置
yaxis_opts=opts.AxisOpts(name="Y"), # y轴配置
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
scatter_chart.render("scatter_chart.html")
Pyecharts——Kline(K线图)
Pyecharts——Kine(K线图)
from pyecharts import options as opts
from pyecharts.charts import HeatMap
# 创建热力图实例
heatmap_chart = HeatMap()
# 添加数据和配置项
data = [
["Monday", "Morning", 27],
["Monday", "Afternoon", 35],
["Monday", "Evening", 28],
["Tuesday", "Morning", 23],
["Tuesday", "Afternoon", 33],
["Tuesday", "Evening", 21],
["Wednesday", "Morning", 17],
["Wednesday", "Afternoon", 25],
["Wednesday", "Evening", 13]
]
categories = ["Monday", "Tuesday", "Wednesday"] # x轴数据,表示星期几
times = ["Morning", "Afternoon","Evening"] # y轴数据,表示时间段
heatmap_chart.add_xaxis(categories)
heatmap_chart.add_yaxis("Temperature", times, data) # y轴数据包括category和value
# 设置全局配置项
heatmap_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Temperature HeatMap"), # 图表标题
visualmap_opts=opts.VisualMapOpts(), # 热力图颜色映射配置项
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
heatmap_chart.render("heatmap_chart.html")
Pyecharts——Funnel(漏斗图)
from pyecharts import options as opts
from pyecharts.charts import Funnel
# 创建漏斗图实例
funnel_chart = Funnel()
# 添加数据和配置项
data = [("Step 1", 100),
("Step 2", 80),
("Step 3", 60),
("Step 4", 40),
("Step 5", 20)]
funnel_chart.add("", data) # 添加数据
# 设置全局配置项
funnel_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Funnel Chart"), # 图表标题
toolbox_opts=opts.ToolboxOpts(), # 工具箱配置项
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
funnel_chart.render("funnel_chart.html")
Pyecharts——Gauge(仪表盘)
from pyecharts import options as opts
from pyecharts.charts import Gauge
# 创建仪表盘实例
gauge_chart = Gauge()
# 添加数据和配置项
data = [("Label", 66.6)] # 标签和数值
gauge_chart.add("", data) # 添加数据
# 设置全局配置项
gauge_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Gauge Chart"), # 图表标题
toolbox_opts=opts.ToolboxOpts(), # 工具箱配置项
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
gauge_chart.render("gauge_chart.html")
Pyecharts——Map(地理图)
我这里使用中国地图演示——地图来源是pyecharts
Map可以指定地图类型,全球地图,国家地图,某一个国家的省级地图,某个省的市级地图
只要该Map地图类型有,就会制作相应的地图!
from pyecharts import options as opts
from pyecharts.charts import Map
# 创建地理图实例
map_chart = Map()
# 添加数据和配置项
data = [("北京", 100),
("上海", 200),
("广州", 150),
("深圳", 180),
("成都", 120)]
map_chart.add("", data, "china") # 添加数据,指定地图类型为中国地图
# 设置全局配置项
map_chart.set_global_opts(
title_opts=opts.TitleOpts(title="Map Chart"), # 图表标题
visualmap_opts=opts.VisualMapOpts(), # 可视化映射配置项
)
# 渲染(生成)图表,可以选择将结果保存为HTML文件或直接在Jupyter Notebook中显示
map_chart.render("map_chart.html")
Pyecharts——Geo(地理坐标系)
地理坐标系用法可以说已经多到可以再另开一课了,所以我只展示其中的一种
Geo在地理坐标系上绘制点,线,分段显示等,常用来制作航行路线、标记事件地点等
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import GeoType, ThemeType, SymbolType # Geo图的类型 主题 涟漪图形符号
# 吉林长春有朝阳区,北京也有朝阳区。为了不影响效果,将北京朝阳区换成了东城区
# 在python资源库查看包含朝阳字的地区:python包路径site-packages-pyecharts-datasets-json文件
data = [("海淀区", "1503"), ("东城区", "9540"), ("石景山区", "4820"), ("丰台区", "3670"), ("通州区", "6493")]
geo = (
Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_schema(maptype="北京",
itemstyle_opts=opts.ItemStyleOpts(color='white', border_color="#EE2C2C"),
zoom=1.5,
is_roam=True,
center=Geo().get_coordinate('海淀区'), # 视角中心
emphasis_itemstyle_opts=opts.ItemStyleOpts(color="#31708f"), # 高亮颜色
emphasis_label_opts=opts.LabelOpts(color="white") # 字体颜色
)
# 上面提到有重复的名称,可以手动添加一个新名字来代替朝阳区,比如北京朝阳区方法如下
.add_coordinate("北京朝阳区", 116.48548, 39.9484)
.add("店铺数量",
data,
type_=GeoType.EFFECT_SCATTER,
symbol_size=6,
)
.add("走直线",
[("海淀区", "东城区"), ("海淀区", "丰台区"), ("海淀区", "石景山区"), ("海淀区", "通州区")],
type_=GeoType.LINES,
effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color='#5f99bb'),
linestyle_opts=opts.LineStyleOpts(curve=0, color="#B0E2FF"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="北京市", subtitle="数据大图", pos_right="center", pos_top="5%"))
)
geo.render("geo_chart.html")
Pyecharts——WordCloud(词云)
对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,方便领略文本的主旨
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
from pyecharts import options as opts
# 词云数据,格式为(词语, 频率)
data = [
("Python", 100),
("Java", 80),
("C++", 60),
("JavaScript", 50),
("HTML", 40),
("CSS", 30),
]
# 创建词云图对象
wordcloud = (
WordCloud()
.add("", data, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="Word Cloud"))
)
# 渲染并显示词云图
wordcloud.render("word_cloud.html")
Pyecharts——EffectScatter(涟漪特效散点图)
from pyecharts import options as opts
from pyecharts.charts import EffectScatter
from pyecharts.faker import Faker
c = (
EffectScatter()
.add_xaxis(Faker.choose())
.add_yaxis("", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="EffectScatter-基本示例"))
)
c.render("EffectScatter_chart.html")
通用的配置选项——使数据图美观
通用配置项
pyecharts
库提供了一些通用的配置项,可以用来自定义图表的样式和外观。以下是一些常用的通用配置项:
title_opts
:设置标题选项,如标题文本、字体大小、位置等。legend_opts
:设置图例选项,如图例类型(普通图例或滚动图例)、图例位置等。tooltip_opts
:设置提示框选项,如是否显示提示框、提示框内容格式等。toolbox_opts
:设置工具箱选项,如是否显示工具箱、工具箱中包含的工具按钮等。xaxis_opts
和yaxis_opts
:分别设置横坐标和纵坐标轴选项,如轴线颜色、刻度标签字体大小等。visualmap_opts
:设置视觉映射组件选项,可用于调整颜色、大小等视觉效果。
以上的配置项都是在set_global_opts()内设置的!
除此之外还有一些特殊一些的配置项:
- dataZoom:用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)
- lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)
-
grid3D:3D笛卡尔坐标系组配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)
-
axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)
-
markLine&markPorint
:图形标记组件,用于标记指定的特殊数据,又标记线和标记点两种。(Bar、Line、Kline)
通用项设置不会影响您的整体数据图结构,这些设置本意是让图变得美观,能够让人更快的理解,更好的分析!如果您的数据图框架是错误的还请不要先写入通用项设置!
自定义类
-
Grid
类:可以在一个页面中并行显示多张图表。通过将多个图表对象传递给Grid()
构造函数,并使用.add()
方法将它们添加到网格中,然后使用.render()
方法渲染为HTML文件。 -
Overlap
类:可以将不同类型的图表叠加在同一张图上展示。通过创建一个空白的基础图表对象,并使用.overlap()
方法分别添加不同类型的子图表对象,然后使用.render()
方法渲染为HTML文件。 -
Page
类:可以在同一网页中按顺序展示多个图表。通过创建一个空白的页面对象,并使用.add()
方法按顺序添加各个图表对象,然后使用.render()
方法渲染为HTML文件。 -
Timeline
类:可以提供时间线轮播多张图表。通过创建一个时间线对象,并使用.add()
方法分别添加每个时间点对应的图表对象,然后使用.render()
方法渲染为HTML文件。
这些类都是用于组合不同类型的图表展示方式,以满足更复杂的需求,适合老手使用
一些其他的图像制作
- Bar3D(3D 柱状图)
- Boxplot(箱形图)
- Line3D(3D 折线图)
- Liquid(水球图)
- Parallel(平行坐标系)
- Polar(极坐标系)
- Radar(雷达图)
- Sankey(桑基图)
- Scatter3D(3D 散点图)
- ThemeRiver(主题河流图)
以上的图像我不会放在我的文章下,如果你要查看这类图像的话可以前往@ezreal_tao的文章!