Skip to content

常用图表制作库

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

Matplotlib库

2003 年 Matplotlib 发布,Matplotlib 是一个用于绘制二维图表和图形的 Python 绘图库,可以创建各种类型的图表,包括折线图、散点图、直方图等。Matplotlib 的发布为 Python 在数据可视化和科学绘图领域提供了重要的支持,使得 Python 成为了一种优秀的数据可视化工具。

image-20241007013225625

image-20241007013313604

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()

matplotlib_1

?> 提示:若要保存图像可以用 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()

matplotlib_2

Echarts库

简介

Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了,其优点如下:

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

QQ截图20221011151957

QQ截图20221011152651

QQ截图20221011153107

快速上手

下载安装

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()

55601443-85510800-5793-11e9-8479-26ff27cdec7e

?> 提示: 在使用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))

QQ截图20221011153519

QQ截图20221011153554

图表案例

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')

QQ截图20211113180159