
常用图表制作库
更新: 2025/2/24 字数: 0 字 时长: 0 分钟
Matplotlib库
2003 年 Matplotlib 发布,Matplotlib 是一个用于绘制二维图表和图形的 Python 绘图库,可以创建各种类型的图表,包括折线图、散点图、直方图等。Matplotlib 的发布为 Python 在数据可视化和科学绘图领域提供了重要的支持,使得 Python 成为了一种优秀的数据可视化工具。
Matplotlib是一个Python的2D绘图库,用于创建出版质量级别的图形、图表的桌面绘图包,支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量(vector)和光栅(raster)图:PDF、SVG、JPG、PNG、BMP、GIF等。
线性、柱状、点状
python
# 导入numpy重命名np
import numpy as np
# 导入matplotlib.pyplot重命名为plt(约定俗成)
import matplotlib.pyplot as plt
# 生成一个0~9的一维数组
data = np.arange(10)
# 创建⼀个新的Figure对象(所有Matplotlib的图像都位于Figure对象中)
fig = plt.figure()
# 将整个画板切隔为3×3共9个区域,在第1区域创建一块画布
fig.add_subplot(3, 3, 1)
# plot绘制线型图(最能反应数据走势,X轴代表数据位置,Y轴代表数据的值。)
plt.plot(data)
# 在第2区域创建一块画布
fig.add_subplot(3, 3, 2)
# plot绘制线型图,-代表线,-代表虚线
plt.plot(data, '--')
# 在第3区域创建一块画布
fig.add_subplot(3, 3, 3)
# plot绘制线型图,k代表黑色,o代表每个数值生成一个点,-代表点之间的连线
plt.plot(data, 'ko-')
# 在第4区域创建一块画布
fig.add_subplot(3, 3, 4)
# scatter绘制点状图,两个10分别代表x、y轴的位置,4代表点的大小
plt.scatter(10, 10, 4)
# 在第5区域创建一块画布
fig.add_subplot(3, 3, 5)
# scatter绘制点状图,两个data代表在x、y轴的连续位置(两个data的长度必须相同)
plt.scatter(data, data, 4)
# 在第6区域创建一块画布
fig.add_subplot(3, 3, 6)
# scatter绘制点状图,两个data代表在x、y轴的连续位置,4*data值越大点越大
plt.scatter(data, data, 4*data, color='k')
# 在第7区域创建一块画布
fig.add_subplot(3, 3, 7)
# hist绘制柱状图(一种可以对值频率进行离散化显示得到数字频率分布图,X轴代表数值分布,Y轴代表数值范围出现的次数)
plt.hist(data)
# 在第8区域创建一块画布
fig.add_subplot(3, 3, 8)
# hist绘制柱状图,bins指条状图条数(每个数占1/bins的宽度)
plt.hist(data, bins=20)
# 在第9区域创建一块画布
fig.add_subplot(3, 3, 9)
# hist绘制柱状图,bins指条状图条数,k颜色为黑色,alpha颜色透明度
plt.hist(data, bins=60, color='k', alpha=0.5)
# 展示图像
plt.show()
?> 提示:若要保存图像可以用 plt.savefig('路径/图片名称.后缀名')
方法进行保存,注意不能和 plt.show()
共同使用,因为这两个方法都会销毁Figure对象,销毁后再去保存或展示图像只会是白板一张。
多线、多点、正太
python
# 导入numpy重命名np
import numpy as np
# 导入matplotlib.pyplot重命名为plt(约定俗成)
import matplotlib.pyplot as plt
# 生成一个0~9的一维数组
data_1 = np.arange(10)
# 生成一个随机0~9的一维数组
data_2 = np.random.randint(0, 10, 10)
# 生成一个含有100000个正太分布的随机数的一维数组
data_3 = np.random.randn(100000)
# 创建⼀个新的Figure对象(所有Matplotlib的图像都位于Figure对象中)
fig = plt.figure()
# 线性图可以很直观的展示出data_1、data_2的走势
fig.add_subplot(3, 3, 1)
plt.plot(data_1)
plt.plot(data_2)
fig.add_subplot(3, 3, 2)
plt.plot(data_1 - data_2)
plt.plot(data_1 + data_2)
fig.add_subplot(3, 3, 3)
plt.plot(data_2 - data_1)
plt.plot(data_2 + data_1)
# 绘制点状图,可以直观的看到数字出现的次数(后出现的橙点会盖住蓝点)
fig.add_subplot(3, 3, 4)
plt.scatter(data_1, data_1)
plt.scatter(data_2, data_2)
fig.add_subplot(3, 3, 5)
plt.scatter(data_1 - data_2, data_1 - data_2)
plt.scatter(data_1 + data_2, data_1 + data_2)
fig.add_subplot(3, 3, 6)
plt.scatter(data_2 - data_1, data_2 - data_1)
plt.scatter(data_2 + data_1, data_2 + data_1)
# 直方图可以显示数据的分布情况,bins可以显示数据出现的次数,bins越大整体数据分布显示就越明确。
fig.add_subplot(3, 3, 7)
plt.hist(data_3, bins=10)
fig.add_subplot(3, 3, 8)
plt.hist(data_3, bins=30)
fig.add_subplot(3, 3, 9)
plt.hist(data_3, bins=200, alpha=0.5, color='k')
# 显示图像
plt.show()
Echarts库
简介
Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了,其优点如下:
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
快速上手
下载安装
pip install pyecharts
第一个图表
python
# 导入柱状图
from pyecharts.charts import Bar
# 在pyecharts一切配置皆在options中
from pyecharts import options
# 写法一:pyecharts常见写法
bar = Bar(init_opts=options.InitOpts(width="900px", height="500px"))
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.set_global_opts(title_opts=options.TitleOpts(title="主标题", subtitle="副标题"))
# 写法二:pyecharts所有方法均支持链式调用
bar = (
Bar(init_opts={"width": "900px", "height": "500px"})
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
)
# 默认在当前目录生成render.html文件,也可以传入路径参数,如bar.render("mycharts.html")
bar.render()
?> 提示: 在使用Pandas或Numpy时,请确保将数值类型转换为Python原生的 int/float。比如整数类型请确保为int,而不是numpy.int32。
主题风格
pyecharts 内置提供了10+种不同的风格,另外也提供了便捷的定制主题的方法。
python
# 导入柱状图、主题
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
# 默认主题,等价于Bar()
Bar(init_opts=opts.InitOpts(theme=ThemeType.WHITE))
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
Bar(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC))
Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA))
Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC))
Bar(init_opts=opts.InitOpts(theme=ThemeType.SHINE))
Bar(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
Bar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN))
Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS))
Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND))
图表案例
python
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/5
# @Author : chenzhuo
# @Desc : 统计爬虫采集的数据量
import os
import time
import openpyxl
import datetime
import requests
import paramiko
from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 图表类,width宽度,height高度,theme主题
chart_line = Line(init_opts={'width': '1900px', 'height': '900px', 'theme': ThemeType.CHALK})
# 页面标题
chart_line.page_title = '资质图表'
# 以日期为横坐标
chart_line.add_xaxis(self.history_date)
# 纵坐标地区和数量
etl_data = all_chart.get(chart_type)[0]
for area in etl_data:
chart_line.add_yaxis(area, etl_data.get(area), is_connect_nones=True, is_selected=False)
chart_line.set_global_opts(
# 标题设置,title主标题,subtitle副标题
title_opts=opts.TitleOpts(title="资质抓取数据(公司数量)", subtitle=f"时间范围30天"),
# 工具栏设置
toolbox_opts=opts.ToolboxOpts(is_show=True, # is_show是否展示
pos_top="top", # pos_top上下位置
pos_left="right", # pos_left左右位置
feature={
"saveAsImage": {}, # 保存为图像
"restore": {}, # 重置选项
"magicType": {"show": True, "type": ["line", "bar"]}, # 切换展示类型,折线,柱状图
"dataView": {}})) # 数据展示
# 保存文件
chart_line.render('zizhi_chart.html')