Python 数据可视化实战


一、环境准备

复制代码
from pyecharts import options as opts
from pyecharts.charts import *

pyecharts 是基于 Apache ECharts 的 Python 可视化库,支持在 Jupyter Notebook 中交互式展示,也可导出为独立 HTML 文件。

两种渲染方式

  • bar.render("./output.html") --- 保存为本地 HTML(PyCharm 推荐)

  • bar.render_notebook() --- 在 Jupyter 中直接显示


二、柱状图(Bar Chart)

柱状图是最基础的数据可视化图表,适合展示分类数据的对比。

复制代码
months = ['一月', '二月', '三月', '四月', '五月', '六月']
cost = [1200, 1500, 1800, 1400, 1600, 2000]

bar = (
    Bar()
    .add_xaxis(months)
    .add_yaxis('消费金额', cost)
)
bar.render_notebook()

数据解读:六月份消费最高(2000元),四月份最低(1400元),整体呈上升趋势。

自定义尺寸

复制代码
bar = (
    Bar(init_opts=opts.InitOpts(width="700px", height="450px"))
    .add_xaxis(months)
    .add_yaxis('消费金额', cost)
)

通过 InitOpts 可控制图表的宽高、主题等全局配置。


三、散点图(Scatter Chart)

散点图用于展示数据点的分布情况,适合观察数据的离散程度和聚类趋势。

复制代码
scatter = (
    Scatter()
    .add_xaxis(months)
    .add_yaxis('消费金额', cost)
)
scatter.render_notebook()

与柱状图的区别:同样的数据,散点图更侧重展示每个数据点的位置关系,而非分类对比。


四、折线图(Line Chart)

折线图适合展示数据随时间的变化趋势,支持多系列对比。

复制代码
cost1 = [1200, 1500, 1800, 1400, 1600, 2000]
cost2 = [1800, 1400, 1560, 2200, 3500, 1900]

line = (
    Line()
    .add_xaxis(months)
    .add_yaxis('A', cost1, is_smooth=True)
    .add_yaxis('B', cost2, is_smooth=True)
)
line.render_notebook()

关键参数

  • is_smooth=True --- 平滑曲线,使折线更加美观

  • 支持多系列叠加,方便对比 A/B 两组数据的趋势

数据解读:B 组在五月出现明显峰值(3500),而 A 组整体较为平稳。


五、饼图(Pie Chart)

饼图用于展示各部分占总体的比例关系。

复制代码
fruits = ['苹果', '香蕉', '橙子', '草莓', '葡萄']
sales = [45, 30, 25, 20, 15]

pie = (
    Pie()
    .add('水果销售比例', [list(z) for z in zip(fruits, sales)],
         radius=["30%", "60%"],      # 环形饼图
         rosetype="area")            # 南丁格尔玫瑰图
    .set_global_opts(
        title_opts=opts.TitleOpts(title="水果销售比例")
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
)
pie.render_notebook()

关键参数

  • radius=["30%","60%"] --- 内半径30%、外半径60%,形成环形饼图

  • rosetype="area" --- 南丁格尔玫瑰图,扇区半径按数据大小映射

  • formatter="{b}: {d}%" --- 标签显示名称和百分比

数据解读:苹果占比最大(30%),葡萄最小(10%)。


六、地理坐标图(Geo)

地理坐标图适合在地图上展示各区域的数据分布,配合涟漪特效更加直观。

复制代码
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType

data = [
    ("广东", 130000), ("浙江", 80000), ("江苏", 70000), ("上海", 85000),
    ("北京", 50000), ("福建", 40000), ("山东", 95000), ("河南", 30000),
    ("河北", 28000), ("四川", 25000), ("湖北", 22000), ("湖南", 20000),
    ("安徽", 18000), ("辽宁", 16000), ("陕西", 14000), ("江西", 12000),
    ("广西", 10000), ("云南", 8000), ("重庆", 7000), ("黑龙江", 6000),
]

geo = (
    Geo()
    .add_schema(maptype="china")
    .add("快递业务量", data, type_=ChartType.EFFECT_SCATTER)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中国各省份快递业务量分布"),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            pieces=[
                {"min": 120000, "label": "12万+", "color": "#7f1100"},
                {"min": 80000, "max": 120000, "label": "8万-12万", "color": "#ff5428"},
                {"min": 40000, "max": 80000, "label": "4万-8万", "color": "#ff8c71"},
                {"min": 1, "max": 40000, "label": "1-4万", "color": "#ffd768"},
            ]
        )
    )
)
geo.render_notebook()

关键参数

  • ChartType.EFFECT_SCATTER --- 涟漪特效散点,数据点有动态效果

  • is_piecewise=True --- 分段型视觉映射

  • pieces --- 自定义每段的颜色和范围

数据解读:广东快递业务量遥遥领先(13万),山东次之(9.5万),长三角和珠三角是快递业务的核心区域。


七、地图(Map)

地图适合展示各省份的填充色数据,直观反映地域差异。

复制代码
from pyecharts.charts import Map

data = [
    ("广东省", 51), ("湖北省", 118), ("湖南省", 143), ("四川省", 121),
    ("重庆市", 113), ("黑龙江省", 211), ("浙江省", 175), ("山西省", 230),
    ("河北省", 63), ("安徽省", 179), ("河南省", 173), ("山东省", 123),
    ("西藏自治区", 212),
]

map_chart = (
    Map()
    .add("确诊人数", data, "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="全国疫情地图"),
        visualmap_opts=opts.VisualMapOpts(
            max_=250, is_piecewise=True,
            pieces=[
                {"min": 200, "label": "≥200", "color": "#7f1100"},
                {"min": 150, "max": 199, "color": "#ff5428"},
                {"min": 100, "max": 149, "color": "#ff8c71"},
                {"min": 50, "max": 99, "color": "#ffd768"},
            ]
        )
    )
)
map_chart.render_notebook()

注意:省份名称必须使用全称(如"广东省"而非"广东"),否则无法匹配地图数据。

数据解读:山西省确诊人数最多(230),广东省最少(51)。


八、词云图(WordCloud)

词云图适合展示文本词频统计结果,字体越大表示词频越高。

复制代码
from pyecharts.charts import WordCloud

words = [
    ("dont", 436), ("then", 365), ("you", 360), ("can", 282),
    ("her", 266), ("make", 255), ("remember", 255), ("it", 247),
    ("bad", 244), ("start", 273), ("hey", 230), ("heart", 173),
    ("a sad song", 184), ("better", 182), ("let", 162),
    ("to", 150), ("jude", 124), ("Take", 138), ("into", 60),
    ("your", 82), ("and", 12),
]

wordcloud = (
    WordCloud()
    .add("", words, word_size_range=[20, 100], shape="circle")
)
wordcloud.render_notebook()

数据来源:Beatles 经典歌曲 "Hey Jude" 的歌词词频统计。

关键参数

  • word_size_range=[20, 100] --- 字体大小范围

  • shape="circle" --- 词云形状为圆形


九、层叠图(Overlap)

层叠图可以将不同类型的图表叠加在一起,实现更丰富的数据展示。

复制代码
x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
y_data_bar = [123, 153, 89, 107, 98, 23]
y_data_line = [153, 107, 23, 89, 123, 107]

bar1 = (
    Bar()
    .add_xaxis(x_data)
    .add_yaxis('bar', y_data_bar)
)

line1 = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis('line', y_data_line)
)

bar1.overlap(line1)
bar1.render_notebook()

使用场景:柱状图展示绝对值,折线图展示趋势或另一维度数据,两者叠加可同时观察销量和增长率。

数据解读:Huawei 柱状值最高(153),但折线值 Apple 最高(153),说明两个维度的排名并不一致。


十、图表类型选择指南

数据特征 推荐图表 适用场景
分类对比 柱状图 各月消费、各产品销量
趋势变化 折线图 时间序列、股价走势
占比分析 饼图 市场份额、预算分配
分布关系 散点图 相关性分析、聚类
地域分布 地图/Geo 各省数据、疫情分布
文本分析 词云图 评论关键词、歌词词频
多维对比 层叠图 销量+增长率、收入+利润

相关推荐
Serendipity_Carl1 小时前
爬虫实战进阶-穷游论坛网清洗与可视化分析
爬虫·python·数据可视化·数据清洗
AI技术控1 小时前
Long-range Brain Graph Transformer 论文解读:用长程依赖建模理解脑网络通信
人工智能·python·深度学习·分类
星恒随风1 小时前
从0开始的操作系统(3)
开发语言·笔记·学习
开发者联盟league1 小时前
pip install出现报错ERROR: Cannot set --home and --prefix together
开发语言·python·pip
Cloud_Shy6181 小时前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(附录 C 高级 Python 概念)
python·数据分析·excel
FlagOS智算系统软件栈1 小时前
众智FlagOS完成腾讯混元MT2多语翻译模型全系列多芯片适配:英伟达/华为/平头哥三芯开箱即用
开发语言·人工智能·开源
東隅已逝,桑榆非晚1 小时前
C语言内存函数
c语言·开发语言·笔记·算法
隔壁大炮1 小时前
MNE-Python 第2天学习笔记:Montage与通道信息管理
python·eeg·mne·脑电数据处理
lly2024061 小时前
Docker 安装 MySQL
开发语言