万字长文-数据分析之python可视化实战教程(强烈推荐!!!)

前言

大家好。之前给大家分享一篇关于pandas的实战教程,干货满满:万字长文-数据分析之pandas精品免费教程如果你想要系统的了解学习pandas的语法和python开发技巧,可以查看上面这篇文章。

今天给大家分享的主题是可视化技巧,之前陆续给大家分享过部分关于如何绘制精美图表的可视化技巧,但比较零散;今天决定整理一份详细的可视化技巧教程,给大家介绍绘制可视化基础知识、可视化图表推荐展示(突出重点)、以及在数据分析挖掘中实用的可视化库表; 每个案例都有对应的python代码,干货满满,本文内容较多,可以收藏慢慢看。

个人认为可视化图表主要的作用有2点; a.展示你想表达的内容给你想看的读者/观众;b.突出重点。即通过可视化向你的观众展示你最想要表达的内容。本文给大家分享多种实用可视化技能并给出对应的python实现案例供大家参考,即便在多维数据展示也可以直观明了的突出自己所表达的重点。可视化前提是真实数据,否则再精美图表展示也毫无意义。如果对你有帮助,还请点赞关注转发~

老规矩,本文涉及的python各个库版本信息如下:

!python -V #3.10   # !pip install mpl_font==1.1.0  mplcyberpunk mplfonts=0.0.8   # !pip install scikit-plot==0.3.7   # !pip install joypy==0.2.6   # !pip install dtreeviz==1.3.2  scikit-learn==1.0.2 cairosvg==2.7.1      # !pip install pybaobabdt==1.0.1 pygraphviz==1.12   # !pip install biokit==0.5.0   # !pip install patchworklib==0.6.0   # !pip install wordcloud==1.9.3   # !pip install  pyecharts==1.9.0   import seaborn as sns   import matplotlib   import mpl_font.noto   import pandas as pd   import numpy as np   import mplcyberpunk   print("seaborn:", sns.__version__," matplotlib:", matplotlib.__version__) #seaborn: 0.12.2  matplotlib: 3.7.4   print("pandas:", pd.__version__," numpy:", np.__version__) #pandas: 2.2.0  numpy: 1.26.3   

本文目录

  • 基础篇: 必知必会的可视化技巧

  • matplotlib库表显示中文字体

  • matplotlib创建画布fig、ax的方法总结

  • 使用pandas.plot函数进行快速可视化

  • 赛博朋克可视化风格让你的图表科幻感十足

  • 图表配色推荐

  • 进阶篇: 可视化图展示形式-推荐用图总结

  • 单条折线图太单调?可以使用面积图来代替

  • 当多种类型的折线图相互叠加时,建议分类型展示

  • 太多类型饼图展示不下?可以使用排序后渐变柱状图展示

  • 同类型不同阶段对比图可以考虑使用双系列重叠图表示

  • 多个维度的度量展示可以拆分为多个图(每个图展示单个维度)

  • 同时展示季度和月份

  • 类别标签过长建议为顶部错落展示

  • 应用篇: 基于scikit-plot库对机器学习的结果进行可视化

  • 绘制ks曲线

  • 绘制聚类的elbow曲线

  • 应用篇: 基于joyplot库精美展示山脊图和多维直方图

  • 展示多维山脊图

  • 展示多维直方图

  • 应用篇: 对决策树模型进行精美可视化

  • 利用dtreeviz库对决策树模型可视化

  • 使用pybaobabat库展示

  • 应用篇: 绘制多组数据统计分布状态图

  • 分组统计柱状图使用seaborn库快速实现分组统计柱状图

  • 基于seaborn的箱型图&&散点图&&分布显著性检验

  • 实战篇: 精美可视化案例绘制

  • 热力图:利用biokit库绘制精美热力图

  • 滑珠图: 绘制滑珠图展示不同产品2个阶段的对比

  • 多图布局:基于patchworklib库进行多个图表布局

  • 词云图:利用WordCloud库来展示精美词云展示

  • 交互式图表: 利用pyecharts绘制可交互的图表

  • 多种度量分组展示: 绘制多图直观展示不同的度量指标

  • 参考文档

基础篇: 必知必会的可视化技巧

matplotlib库表显示中文字体

给大家推荐下面2个库可彻底解决Matplotlib亚洲字体 (中文、韩文及日文等)乱码问题、轻松管理Matplotlib字体库;

  • mpl-font(github仓库:https://github.com/koho/mpl-font)

  • mplfonts(github仓库:https://github.com/Clarmy/mplfonts )

# 方式一   pip install  mplfonts   !mplfonts init #安装好之后需要在bash环境单独执行      # 方式二   !pip install mpl_font==1.16.0   import mpl_font.noto      # 示例代码   import matplotlib.pyplot as plt   from mplfonts.util.manage import use_font      FONT_NAMES = {       "Noto Sans Mono CJK SC": "Noto等宽",       "Noto Serif CJK SC": "Noto宋体",       "Noto Sans CJK SC": "Noto黑体",       "Source Han Serif SC": "思源宋体",       "Source Han Mono SC": "思源等宽",       "SimHei": "微软雅黑",   }   fig,axes = plt.subplots(3,2,figsize=(12, 6))      for index,(font_name, desc) in enumerate(FONT_NAMES.items()):       use_font(font_name)       axes[int(index/2),index%2].text(0.1, 0.6, font_name, fontsize=20)       axes[int(index/2),index%2].text(0.1, 0.2, desc, fontsize=20)   plt.show()   

输出结果:

matplotlib创建画布fig、ax的方法总结

当我们进行复杂图表绘制时,需要灵活性强。我通常喜欢实用matplotlib库来绘制复杂图表,其底层api支持几乎各种款式自定义,缺点就是需要对代码和函数接口深入了解。 matplotlib库中创建图的方式主要有下面几种:

  • 通过fig创建ax主要有2种方式;方式一、方式二;

  • 通过plt创建ax主要有3种方式;方式三、方式四、方式五;

  • 插入画中画;即通过ax创建ax主要有1种方式;方式六

# 定义fig   fig= plt.figure(figsize=(8,12), dpi=200)      # 方式一   自定义画布ax   ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 散点图位置   ax2 = fig.add_axes([0.1, 0.9, 0.8, 0.1])  # 边际分布图位置   ax3 = fig.add_axes([0.9, 0.1, 0.1, 0.8])  # 边际分布图位置      #方式二   fig.subplots_adjust(left=0.1, wspace=0.06, hspace=0.06)   ax1 = fig.add_subplot(221)   ax2 = fig.add_subplot(222)   ax3 = fig.add_subplot(223)   ax4 = fig.add_subplot(224)      # 方式三   # 绘制不规则的网格ax(空间布局)   ax = plt.subplot2grid((3,3),(0,0),rowspan=1, colspan=1)   do_something(ax)   ax = plt.subplot2grid((3,3),(0,1),rowspan=1, colspan=1,projection='polar')   do_something(ax)   ax = plt.subplot2grid((3,3),(0,1),rowspan=1, colspan=2) # 使用一行2列的位置区间画图   do_something(ax)      # 方式四   fig, axes = plt.subplots(3,3)   ax1= axes[0,0] #第一个位置的画布   ax2= axes[2,2] #第一个位置的画布   plt.subplots_adjust(wspace=0.06, hspace=0.06)      # 方式五   ax= plt.subplot(221)   ax= plt.subplot(222)   plt.subplots_adjust(wspace=0.06, hspace=0.06)      # 方式六   from mpl_toolkits.axes_grid1.inset_locator import inset_axes   axins = inset_axes(ax, width=.4, height=.4,loc='upper left',                      bbox_to_anchor=(0.01, 0.22, 1, 1),                      bbox_transform=ax.transAxes,                      borderpad=0)   axins.set_ylim(bottom=8,top=35)   axins.set_xlim(left=-.5,right=2.5)      #通过ax获得fig   fig =ax.get_figure()   # 关闭fig   plt.close(fig)   

使用pandas.plot函数进行快速可视化

在文章万字长文-数据分析之pandas精品免费教程中可视化部分给大家详细介绍pandas的plot函数;这里就以绘制的柱状图,可以看出非常的精简,用于快绘制想要的图表。

import pandas as pd   from mplfonts import use_font   import matplotlib.pyplot as plt   use_font('Noto Sans CJK SC')      test_dict = {'销售量': [1000, 2000, 5000, 2000, 4000, 3000], '收藏量': [1500, 2300, 3500, 2400, 1900, 3000]}   df = pd.DataFrame(test_dict, index=['一月', '二月', '三月', '四月', '五月', '六月'])      text_kwargs = dict(figsize=(8, 4), fontsize=9)   ax = df['销售量'].plot(title='销量图', kind='bar', rot=45, **text_kwargs)   m_ax = ax.bar(df.index.tolist(), df['销售量'].tolist(),color= ["#D9D9D9","#547DB1", '#EA8379','#7DAEE0','#B395BD'])   ax.bar_label(m_ax)   plt.show()   

输出结果:

赛博朋克可视化风格让你的图表科幻感十足

mplcyberpunk 库(官方github:https://github.com/dhaitz/mplcyberpunk)是一个基于matplotlib库的主题库,提供赛博朋克风格科幻风格的主题,可以让你的图表更加精美。

!pip install mpl_font==1.16.0   import matplotlib.pyplot as plt   import mplcyberpunk   import mpl_font.noto   with plt.style.context("cyberpunk"):       categories = ['成都', '重庆', '上海', '西安', '南京']       values = [25, 67, 19, 45, 10]       colors = ["#D9D9D9","#547DB1", "#719DC9", "#C6D6EA", "#DEE7F3"]       fig, ax =plt.subplots(figsize=(6,3))       bars = ax.bar(categories, values, color=colors, zorder=2)       ax.bar_label(bars)       mplcyberpunk.add_bar_gradient(bars=bars)      plt.show()   

图表配色推荐

给大家分享在平时绘图中好看常用的配色;

常见好看的色谱图

耐看的配色:
双色配色: #C9342B #339DB5   双色配色: #E6846D #8DCDD5   双色配色: #F9BEBB #89C9C8   双色配色: #9FC9DF #F1E1C7   双色配色: #C8D7EB #FAEBC7   双色配色: #9E9E9E #F5C96B   双色配色: #8A7197 #999A9E   双色配色: #B291B5 #3BA997      三色折线图配色: #C24976 #469393 #84C2AE   三色折线图配色: #EA8379 #7DAEE0 #B395BD   三色柱状图配色: #299D8F #E9C46A #D87659   三色柱状图配色: #EF76TA #456990 #48C0AA      四色柱状图配色: #55B7E6 #193E8F #E53528 #F09739   四色柱状图配色: #66529F #A37E7D #BF9895 #DAB2B2   四色柱状图配色: #DB432C #438870 #838AAF #C4B797      五色配图配色: #D9D9D9 #547DB1 #719DC9 #C6D6EA #DEE7F3      六色分面组图配色: #427AB2 #F09148 #FF9896 #DBDB8D #C59D94 #AFC7E8   六色密度图配色: #EEA599 #FAC795 #FFE9BE #E3EDEO #ABD3E1 #92B4C8      多色机制图配色:#43978F #9EC4BE #ABDOF1 #DCE9F4 #E56F5E #F19685 #F6C957 #FFB77F #FBE8D5      多色机制图配色: #D3D3D3 #DEBF80 #DCCD5B #73AD96 #5F9069 #375631   多色机制图配色: #343434 #DFE9F4 #245297 #85C17E #CDE8C3 #62AA67   

进阶篇: 可视化图展示形式-推荐用图总结

单条折线图太单调?可以使用面积图来代替

折线图一般用于描述某个类型的趋势变化情况;一般来说对应的x轴的业务含义是有相对位置关系的。单条折线图展示过于单调,建议使用面积图来代替单一的折线图,使得图表丰富起来,下面是对应的案例展示。

from mplfonts.util.manage import use_font   use_font('Noto Sans CJK SC')   import matplotlib.pyplot as plt   import mplcyberpunk   with plt.style.context("cyberpunk"):       x = ['202309', '202310', '202311', '202312', '202401']       y = [25, 67, 19, 45, 10]       fig, axes =plt.subplots(1,2, figsize=(8,3),dpi=200)              ax=axes[0]       ax.set_title("不建议图表展示风格",color='red', fontsize=8)       ax.plot(x,y,marker='^')       use_font('Noto Sans CJK SC')              ax=axes[1]       ax.set_title("建议绘制展示风格",color='green', fontsize=8)       ax.plot(x,y,marker='^')       use_font('Noto Sans CJK SC')       mplc
  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值