使用Python的pyecharts库实现数据可视化
Python pyecharts 模块
pyecharts 是一个基于 ECharts 的 Python 数据可视化库,它允许用户使用 Python 语言生成各种类型的交互式图表和数据可视化。
ECharts 是由百度开发的一款强大的开源数据可视化库,而 Pyecharts 则是 ECharts 的 Python 封装,使得在 Python 中使用 ECharts 变得更加方便。
pyecharts 提供了一组简单而灵活的 API,使用户能够轻松地创建各种图表,包括但不限于折线图、柱状图、散点图、饼图、地图等。
通过 pyecharts,用户可以使用 Python 语言处理和准备数据,然后使用简洁的代码生成交互式的图表,这些图表可以嵌入到 Web 应用程序中或保存为静态文件。
pyecharts 特点与功能:
简单易用: Pyecharts 提供了直观而友好的 API,使得用户能够快速上手,轻松生成各种图表。
丰富的图表类型: 支持多种常见的图表类型,包括线图、柱状图、散点图、饼图、地图等,满足不同场景的需求。
支持主流数据格式: 能够处理常见的数据格式,如列表、字典、Pandas DataFrame 等。
交互性: 生成的图表可以具有交互性,用户可以通过鼠标悬停、缩放等方式与图表进行互动。
丰富的配置选项: 提供了丰富的配置选项,允许用户自定义图表的样式、布局等属性。
支持主题: 提供多种主题,用户可以根据需要选择合适的主题,使图表更符合应用的整体风格。
pyecharts 安装
pip 安装:
pip install pyecharts
源码安装:
$ git clone https://github.com/pyecharts/pyecharts.git $ cd pyecharts $ pip install -r requirements.txt $ python setup.py install # 或者执行 python install.py
安装成功后可以查看 pyecharts 版本:
import pyecharts print(pyecharts.__version__)
输出如下所示:
2.0.4
pyecharts 图表类型
pyecharts 支持以下图表类型图表:
图表类型 | pyecharts 类 | 包引入 |
---|---|---|
折线图 | Line |
from pyecharts.charts import Line |
柱状图 | Bar |
from pyecharts.charts import Bar |
散点图 | Scatter |
from pyecharts.charts import Scatter |
饼图 | Pie |
from pyecharts.charts import Pie |
雷达图 | Radar |
from pyecharts.charts import Radar |
热力图 | HeatMap |
from pyecharts.charts import HeatMap |
K 线图 | Kline |
from pyecharts.charts import Kline |
箱线图 | Boxplot |
from pyecharts.charts import Boxplot |
地图 | Map |
from pyecharts.charts import Map |
词云图 | WordCloud |
from pyecharts.charts import WordCloud |
仪表盘 | Gauge |
from pyecharts.charts import Gauge |
漏斗图 | Funnel |
from pyecharts.charts import Funnel |
树图 | Tree |
from pyecharts.charts import Tree |
平行坐标系图 | Parallel |
from pyecharts.charts import Parallel |
桑基图 | Sankey |
from pyecharts.charts import Sankey |
地理坐标系图 | Geo |
from pyecharts.charts import Geo |
时间线图 | Timeline |
from pyecharts.charts import Timeline |
3D 散点图 | Scatter3D |
from pyecharts.charts import Scatter3D |
3D 柱状图 | Bar3D |
from pyecharts.charts import Bar3D |
3D 曲面图 | Surface3D |
from pyecharts.charts import Surface3D |
创建第一个图表
接下来我们使用 Pyecharts 创建了一个简单的柱状图,展示了五个月份的销售额:
实例
# 准备数据
x_data = ['一月', '二月', '三月', '四月', '五月']
y_data = [10, 20, 15, 25, 30]
# 创建柱状图
bar_chart = Bar()
bar_chart.add_xaxis(x_data)
bar_chart.add_yaxis("销售额", y_data)
# 也可以传入路径参数,如 bar_chart.render("bar_chart.html")
bar_chart.render()
如果在 bar_chart.render() 中不指定文件路径,Pyecharts 默认会在当前工作目录下生成一个名为 "render.html" 的文件,即生成的图表将保存在 "render.html" 文件中。
以上代码,执行结果为:
如果你希望图表的文件名有一定的规范,或者想要指定保存的路径,可以在 render() 方法中提供文件路径参数。例如:
bar_chart.render("my_bar_chart.html")
这样,生成的图表就会保存在当前工作目录下的 "my_bar_chart.html" 文件中。
设置图表配置选项
实例中图表的标题是 "月度销售额柱状图",横轴是月份,纵轴是销售额,可以根据实际需求调整数据和图表配置:
实例
from pyecharts.charts import Bar
# 准备数据
x_data = ['一月', '二月', '三月', '四月', '五月']
y_data = [10, 20, 15, 25, 30]
# 创建柱状图
bar_chart = Bar()
bar_chart.add_xaxis(x_data)
bar_chart.add_yaxis("销售额", y_data)
# 配置图表
bar_chart.set_global_opts(
title_opts=opts.TitleOpts(title="月度销售额柱状图"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)"),
)
# 渲染图表
bar_chart.render("bar_chart.html")
说明:
-
Bar()
:创建一个柱状图对象。 -
add_xaxis
和add_yaxis
:分别用于添加横轴和纵轴的数据。 -
set_global_opts
:配置全局选项,包括标题、坐标轴的名称等。
生成的图表将保存为 "bar_chart.html" 文件,你可以在浏览器中打开该文件,查看生成的柱状图。
使用主题
pyecharts 支持主题切换,用户可以根据自己的需求选择合适的主题来改变图表的样式。
pyecharts 提供了 10+ 种内置主题,开发者也可以定制自己喜欢的主题。
以下是一个简单的例子,演示了如何使用 pyecharts 切换主题:
实例
from pyecharts.charts import Bar
# 内置主题类型可查看 pyecharts.globals.ThemeType
from pyecharts.globals import ThemeType
# 准备数据
x_data = ['一月', '二月', '三月', '四月', '五月']
y_data = [10, 20, 15, 25, 30]
# 创建柱状图
bar_chart = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) # 初始主题为亮色系
bar_chart.add_xaxis(x_data)
bar_chart.add_yaxis("销售额", y_data)
# 配置图表
bar_chart.set_global_opts(
title_opts=opts.TitleOpts(title="月度销售额柱状图"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)"),
)
# 切换到暗色系主题
bar_chart.set_global_opts(theme=ThemeType.DARK)
# 渲染图表
bar_chart.render("themed_bar_chart.html")
以上例子演示了如何在 pyecharts 中使用 ThemeType
来切换主题,pyecharts 支持的主题类型包括 LIGHT
(亮色系)、DARK
(暗色系)等,你可以根据需求选择合适的主题。
-
init_opts=opts.InitOpts(theme=ThemeType.LIGHT)
:在创建图表对象时,通过init_opts
参数指定图表的初始主题,这里设置为亮色系。
生成的图表如下:
以下是 pyecharts 支持的主题列表:
Light Themes(亮色系主题):
-
"LIGHT"
: 亮色系默认主题 -
"WESTEROS"
: 经典的暖色调主题 -
"CHALK"
: 粉笔风格主题 -
"ESSOS"
: 温和的绿色调主题 -
"INFOGRAPHIC"
: 信息图形主题 -
"MACARONS"
: 美味糖果色主题
Dark Themes(暗色系主题):
-
"DARK"
: 暗色系默认主题 -
"PURPLE-PASSION"
: 深紫色调主题 -
"SHINE"
: 简洁的黑色调主题 -
"VINTAGE"
: 复古风格主题 -
"ROMA"
: 古罗马风格主题 -
"WALDEN"
: 森林深色系主题
用户可以通过设置自定义的颜色和样式来创建自定义主题。
设置全局配置项
set_global_opts 是 pyecharts 中用于设置全局配置项的方法,该方法允许你配置整个图表的一些全局属性,如标题、坐标轴、图例等。
以下是一些常用的全局配置项:
bar_chart.set_global_opts( title_opts=opts.TitleOpts(title="月度销售额柱状图", subtitle="副标题"), xaxis_opts=opts.AxisOpts(name="月份"), yaxis_opts=opts.AxisOpts(name="销售额(万元)"), legend_opts=opts.LegendOpts(pos_left="center", pos_top="top"), toolbox_opts=opts.ToolboxOpts(), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), )
说明:
-
title_opts
: 标题配置项,可以设置主标题和副标题,以及相关的样式设置。 -
xaxis_opts
和yaxis_opts
: x 轴和 y 轴的配置项,可以设置轴的名称、轴线样式等。 -
legend_opts
: 图例配置项,可以设置图例的位置、样式等。 -
toolbox_opts
: 工具箱配置项,用于添加一些交互工具,如保存为图片、数据视图等。 -
tooltip_opts
: 提示框配置项,可以设置提示框的触发方式、样式等。
实例
from pyecharts.charts import Bar
# 准备数据
x_data = ['一月', '二月', '三月', '四月', '五月']
y_data = [10, 20, 15, 25, 30]
# 创建柱状图
bar_chart = Bar()
bar_chart.add_xaxis(x_data)
bar_chart.add_yaxis("销售额", y_data)
# 配置全局属性
bar_chart.set_global_opts(
title_opts=opts.TitleOpts(title="月度销售额柱状图", subtitle="副标题"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)"),
legend_opts=opts.LegendOpts(pos_left="center", pos_top="top"),
toolbox_opts=opts.ToolboxOpts(),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
)
# 渲染图表
bar_chart.render("global_options_bar_chart.html")
生成的图表如下:
更多 pyecharts 模块内容可以参考: https://pyecharts.org/#/zh-cn/intro
上一篇: 如何轻松绘制出一幅迷人的热力地图?
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
基于SSM的面向过程考核的高校课程实验系统-00941(免费领取源码+数据库) 可做计算机毕业设计 JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案等
-
在 Django 中使用 python 的 django-mptt 库来实现无限级树结构非常直观且易于实现
-
一种结构设计模式,允许在对象中动态添加新行为。它通过创建一个封装器来实现这一目的,即把对象放入一个装饰器类中,然后把这个装饰器类放入另一个装饰器类中,以此类推,形成一个封装器链。这样,我们就可以在不改变原始对象的情况下动态添加新行为或修改原始行为。 在 Java 中,实现装饰器设计模式的步骤如下: 定义一个接口或抽象类作为被装饰对象的基类。 公共接口 Component { void operation; } } 在本例中,我们定义了一个名为 Component 的接口,该接口包含一个名为 operation 的抽象方法,该方法定义了被装饰对象的基本行为。 定义一个实现基类方法的具体装饰对象。 公共类 ConcreteComponent 实现 Component { public class ConcreteComponent implements Component { @Override public void operation { System.out.println("ConcreteComponent is doing something...") ; } } 定义一个抽象装饰器类,该类继承于基类,并将装饰对象作为一个属性。 公共抽象类装饰器实现组件 { protected Component 组件 public Decorator(Component component) { this.component = component; } } @Override public void operation { component.operation; } } } 在这个示例中,我们定义了一个名为 Decorator 的抽象类,它继承了 Component 接口,并将被装饰对象作为一个属性。在操作方法中,我们调用了被装饰对象上的同名方法。 定义一个具体的装饰器类,继承自抽象装饰器类并实现增强逻辑。 公共类 ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component 组件) { super(component); } } public void operation { super.operation System.out.println("ConcreteDecoratorA 正在添加新行为......") ; } } 在本例中,我们定义了一个名为 ConcreteDecoratorA 的具体装饰器类,它继承自装饰器抽象类,并实现了操作方法的增强逻辑。在操作方法中,我们首先调用被装饰对象上的同名方法,然后添加新行为。 使用装饰器增强被装饰对象。 公共类 Main { public static void main(String args) { Component 组件 = new ConcreteComponent; component = new ConcreteDecoratorA(component); 组件操作 } } 在这个示例中,我们首先创建了一个被装饰对象 ConcreteComponent,然后通过 ConcreteDecoratorA 类创建了一个装饰器,并将被装饰对象作为参数传递。最后,调用装饰器的操作方法,实现对被装饰对象的增强。 使用场景 在 Java 中,装饰器模式被广泛使用,尤其是在 I/O 中。Java 中的 I/O 库使用装饰器模式实现了不同数据流之间的转换和增强。 让我们打开文件 a.txt,从中读取数据。InputStream 是一个抽象类,FileInputStream 是专门用于读取文件流的子类。BufferedInputStream 是一个支持缓存的数据读取类,可以提高数据读取的效率,具体代码如下: @Test public void testIO throws Exception { InputStream inputStream = new FileInputStream("C:/bbb/a.txt"); // 实现包装 inputStream = new BufferedInputStream(inputStream); byte bytes = new byte[1024]; int len; while((len = inputStream.read(bytes)) != -1){ System.out.println(new String(bytes, 0, len)); } } } } 其中 BufferedInputStream 对读取数据进行了增强。 这样看来,装饰器设计模式和代理模式似乎有点相似,接下来让我们讨论一下它们之间的区别。 第三,与代理模式的区别: 代理模式的目的是控制对对象的访问,它在对象外部提供一个代理对象来控制对原对象的访问。代理对象和原始对象通常实现相同的接口或继承相同的类,以确保两者可以相互替换。 装饰器模式的目的是动态增强对象的功能,而这是通过对象内部的包装器来实现的。在装饰器模式中,装饰器类和被装饰对象通常实现相同的接口或继承自相同的类,以确保两者可以相互替代。装饰器模式也被称为封装器模式。 在代理模式中,代理类附加了与原类无关的功能。
-
2 Python 中的常用数据可视化库:Bokeh 和 Altair
-
Oracle 数据库分页查询的几种写法-2 使用解析函数实现分页查询
-
Python 使用 pyodbc 访问数据库的操作方法详情
-
[姿势估计] 实践记录:使用 Dlib 和 mediapipe 进行人脸姿势估计 - 本文重点介绍方法 2):方法 1:基于深度学习的方法:。 基于深度学习的方法:基于深度学习的方法利用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN),直接从人脸图像中学习姿势估计。这些方法能够学习更复杂的特征表征,并在大规模数据集上取得优异的性能。方法二:基于二维校准信息估计三维姿态信息(计算机视觉 PnP 问题)。 特征点定位:人脸姿态估计的第一步是通过特征点定位来检测和定位人脸的关键点,如眼睛、鼻子和嘴巴。这些关键点提供了人脸的局部结构信息,可用于后续的姿势估计。 旋转表示:常见的旋转表示方法包括欧拉角和旋转矩阵。欧拉角通过三个旋转角度(通常是俯仰、偏航和滚动)描述头部的旋转姿态。旋转矩阵是一个 3x3 矩阵,表示头部从一个坐标系到另一个坐标系的变换。 三维模型重建:根据特征点的定位结果,三维人脸模型可用于姿势估计。通过将人脸的二维图像映射到三维模型上,可以估算出人脸的旋转和平移信息。这就需要建立人脸的三维模型,然后通过优化方法将模型与特征点对齐,从而获得姿势估计结果。 特征点定位 特征点定位是用于检测人脸关键部位的五官基础部分,还有其他更多的特征点表示方法,大家可以参考我上一篇文章中介绍的特征点检测方案实践:人脸校正二次定位操作来解决人脸校正的问题,客户在检测关键点的代码上略有修改,坐标转换部分客户见上图 def get_face_info(image). img_copy = image.copy image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) # 在图像上绘制人脸检测注释。 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) box_info, facial = None, None if results.detections: for detection in results. for detection in results.detections: mp_drawing.Drawing.detection = 无 mp_drawing.draw_detection(image, detection) 面部 = detection.location_data.relative_keypoints 返回面部 在上述代码中,返回的数据是五官(6 个关键点的坐标),这是用 mediapipe 库实现的,下面我们可以尝试用另一个库:dlib 来实现。 使用 dlib 使用 Dlib 库在 Python 中实现人脸关键点检测的步骤如下: 确保已安装 Dlib 库,可使用以下命令: pip install dlib 导入必要的库: 加载 Dlib 的人脸检测器和关键点检测器模型: 读取图像并将其灰度化: 使用人脸检测器检测图像中的人脸: 对检测到的人脸进行遍历,并使用关键点检测器检测人脸关键点: 显示绘制了关键点的图像: 以下代码将参数 landmarks_part 添加到要返回的关键点坐标中。
-
教程] 利用 ECharts 实现高德地图的数据可视化使用 ECharts 对高德地图进行数据可视化
-
在 .NET WinForms 中使用 ScottPlot 库快速实现大型数据集的交互式显示