人生苦短,我用 Python

前文传送门:

小白学 Python 数据分析(1):数据分析基础

小白学 Python 数据分析(2):Pandas (一)概述

小白学 Python 数据分析(3):Pandas (二)数据结构 Series

小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame

小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择

小白学 Python 数据分析(7):Pandas (六)数据导入

小白学 Python 数据分析(8):Pandas (七)数据预处理

小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

小白学 Python 数据分析(10):Pandas (九)数据运算

小白学 Python 数据分析(11):Pandas (十)数据分组

小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)

小白学 Python 数据分析(13):Pandas (十二)数据表拼接

小白学 Python 数据分析(14):Pandas (十三)数据导出

小白学 Python 数据分析(15):数据可视化概述

小白学 Python 数据分析(16):Matplotlib(一)坐标系

小白学 Python 数据分析(17):Matplotlib(二)基础操作

小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)

散点图

上一篇我们介绍了常见的折线图和柱状图,本篇我们接着看其他常用的图形。

散点图经常用来表示数据之间的关系,使用的是 plt 库中的 scatter() 方法,还是先看下 scatter() 的语法,来自官方文档:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

前面介绍过的参数这里不再多说,说点散点图特有的参数:

  • s : 表示的是每个点的大小,如果只有一个数值的时候,则所有的点都是一样大的,也可以传入一个列表,这时候每个点的大小都不一样,散点图也就成了气泡图。
  • c : 表示点的颜色,如果只有一种颜色的时候,则每个点的颜色都会相同,也可以使用列表定义不同的颜色
  • linewidths : 表示每个散点的线宽
  • edgecolors : 每个散点外轮廓的颜色

其实散点图的常用参数和之前的折线图柱状图都差不多,还有一些没介绍的高阶参数可以参考官方文档,主要是用来做一些比较骚的操作的,可以用来自定义颜色的渐变。

看个简单的示例,数据还是使用前文的数据:

import matplotlib.pyplot as plt
import numpy as np # 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000]) plt.scatter(x_data, y_data, s = 100, c = 'green', marker='o', edgecolor='black', alpha=0.5, label = '产品销量') plt.legend() plt.savefig("scatter_demo.png")

结果如下:

气泡图

气泡图和上面的散点图非常类似,只是点的大小不一样,而且是通过参数 s 来进行控制的,多的不说,还是看个示例:

import matplotlib.pyplot as plt
import numpy as np # 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000]) # 根据 y 值的不同生成不同的颜色
colors = y_data * 10
# 根据 y 值的不同生成不同的大小
area = y_data / 300 plt.scatter(x_data, y_data, s = area, c = colors, marker='o', edgecolor='black', alpha=0.5, label = '产品销量') plt.legend() plt.savefig("scatter_demo1.png")

代码不多解释了,注释已经写得很清楚了,直接来看结果:

堆叠图

堆叠图的作用和折线图非常类似,它采用的是 stackplot() 方法。

语法如下:

plt.stackplot(x, y, labels, colors)

stackplot() 堆叠图的语法比较简单,这里就不多介绍了,看过前面的同学应该一眼就能明白,接下来我们看个示例:

import matplotlib.pyplot as plt

# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] x_data = [2011,2012,2013,2014,2015,2016,2017]
y_data = [58000,60200,63000,71000,84000,90500,107000]
y_data_1 = [78000,80200,93000,101000,64000,70500,87000] plt.title(label='xxx 公司 xxx 产品销量') plt.stackplot(x_data, y_data, y_data_1, labels=['产品销量', '用户增长数']) plt.legend() plt.savefig("stackplot_demo.png")

结果如下:

雷达图

雷达图各位同学可能在玩游戏的时候经常看到,或者是做一些能力测评的时候,它可以直观的看出来一个事物的优势与不足。

在 plt 中建立雷达图是用 polar() 方法的,这个方法其实是用来建立极坐标系的,而雷达图就是先在极坐标系中将各个点找出来,然后再将他们连线连起来。

语法如下:

plt.polar(theta, r, **kwargs)
  • theta : 每一个点在极坐标系中的角度
  • r : 每一个点在极坐标系中的半径

接下来我们来看个示例,这个示例完全出于小编自己幻想,无其他任何意义:

import numpy as np
import matplotlib.pyplot as plt # 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 使用ggplot的绘图风格
plt.style.use('ggplot') # 构造数据
values = [3.2, 2.1, 3.5, 2.8, 3]
feature = ['攻击力', '防御力', '恢复力', '法术强度', '生命值'] N = len(values)
# 设置雷达图的角度,用于平分切开一个圆面
angles = np.linspace(0, 2 * np.pi, N, endpoint=False) # 为了使雷达图一圈封闭起来,需要下面的步骤
values = np.concatenate((values, [values[0]]))
angles = np.concatenate((angles, [angles[0]])) # 绘图
fig = plt.figure()
# 这里一定要设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values, 'o-', linewidth=2)
# 填充颜色
ax.fill(angles, values, alpha=0.25)
# 添加每个特征的标签
ax.set_thetagrids(angles * 180 / np.pi, feature)
# 设置雷达图的范围
ax.set_ylim(0, 5)
# 添加标题
plt.title('游戏人物属性')
# 添加网格线
ax.grid(True)
# 显示图形
plt.savefig('polar_demo.png')

结果如下:

饼图

饼图的作用和上面的雷达图有些类似,也是用来表示同一个事物的不同类别的占比情况,它使用的是 plt 中的 pie 这个方法。

语法如下:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, hold=None, data=None)

饼图的参数还是比较复杂的,我们接下来一个一个看:

  • x : array-like
  • explode : array-like, optional, default: None(设置饼图偏离)
  • labels : list, optional, default: None(标签)
  • colors : array-like, optional, default: None(颜色设置)
  • autopct : None (default), string, or function, optional(设置百分比显示)
  • pctdistance : float, optional, default: 0.6(百分比距圆心的位置)
  • shadow : bool, optional, default: False(设置阴影)
  • labeldistance : float, optional, default: 1.1(标签距圆心的距离)
  • startangle : float, optional, default: None(开始位置的旋转角度,第一个分类是在右45度位置)
  • radius : float, optional, default: None(设置半径的大小)
  • counterclock : bool, optional, default: True(是否逆时针)
  • wedgeprops : dict, optional, default: None(内外边界设置)
  • textprops : dict, optional, default: None(文本设置)
  • center : list of float, optional, default: (0, 0)(设置中心位置)
  • frame : bool, optional, default: False(是否显示饼图背后图框)

来个简单的示例:

import matplotlib.pyplot as plt

# 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他'] # 让本科学历离圆心远一点
explode = [0,0,0.1,0,0] # 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal') # 自定义颜色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色 # 绘制饼图
plt.pie(x=edu, # 绘图数据
explode = explode, # 突出显示大专人群
labels = labels, # 添加教育水平标签
colors = colors, # 设置饼图的自定义填充色
autopct = '%.1f%%', # 设置百分比的格式,这里保留一位小数
) # 添加图标题
plt.title('xxx 公司员工教育水平分布') # 保存图形
plt.savefig('pie_demo.png')

结果如下:

环形图

环形图其实是另一种饼图,使用的还是上面的 pie() 这个方法,这里只需要设置一下参数 wedgeprops 即可。

示例如下:

import matplotlib.pyplot as plt

# 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他'] # 让本科学历离圆心远一点
explode = [0,0,0.1,0,0] # 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal') # 自定义颜色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色 # 绘制饼图
plt.pie(x=edu, # 绘图数据
explode = explode, # 突出显示大专人群
labels = labels, # 添加教育水平标签
colors = colors, # 设置饼图的自定义填充色
autopct = '%.1f%%', # 设置百分比的格式,这里保留一位小数
wedgeprops = {'width': 0.3, 'edgecolor':'green'}
) # 添加图标题
plt.title('xxx 公司员工教育水平分布') # 保存图形
plt.savefig('pie_demo1.png')

这个示例仅仅在前面示例的基础上增加了一个参数 wedgeprops 的设置,我们看下结果:

热力图

热力图用到的方法是 imshow() ,他的语法如下:

plt.imshow(x, cmap)

首先这里要注意, x 是数据,但是一定要是矩阵形式的。

示例如下:

import numpy as np
import matplotlib.pyplot as plt x = np.random.rand(10, 10)
plt.imshow(x, cmap=plt.cm.hot) # 显示右边颜色条
plt.colorbar() plt.savefig('imshow_demo.png')

结果如下:

Matplotlib 的常用图表到这里就要结束了,接下来,我们会接着介绍我们之前说过的 pyecharts 的常用图表。

代码仓库

老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

示例代码-Gitee

参考

https://blog.csdn.net/kun1280437633/article/details/80841364

https://blog.csdn.net/claroja/article/details/72911155

小白学 Python 数据分析(19):Matplotlib(四)常用图表(下)的更多相关文章

  1. 小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  2. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  3. 小白学 Python 数据分析(16):Matplotlib(一)坐标系

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  4. 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

    在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...

  5. 小白学 Python 数据分析(20):pyecharts 概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  6. 小白学 Python 数据分析(21):pyecharts 好玩的图表(系列终篇)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  7. 小白学 Python 数据分析(2):Pandas (一)概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 概览 首先还是几个官方链接放一下: Pandas 官网:https://pandas.pydata.or ...

  8. 小白学 Python 数据分析(7):Pandas (六)数据导入

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  9. 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

随机推荐

  1. java 项目乱码解决(web.xml全局配置编码格式)

    <!-- 乱码解决 --> <filter> <filter-name>encodingFilter</filter-name> //过滤器名称 < ...

  2. JavaScript 中事件对象参数:clientX、clientY、offsetX、offsetY、screenX、screenY

    JavaScript 中一些概念理解 :clientX.clientY.offsetX.offsetY.screenX.screenY clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x ...

  3. 阿里巴巴-德鲁伊druid连接池配置

    阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好,Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给Data ...

  4. idea如何使用git

    1.安装好git(我下载的2.23.0版本百度网盘分享)  提取码  7ie1 2.配置git环境变量  Path   路径是你安装的git 目录下的bin目录   安装好后窗口命令输入git 可以测 ...

  5. Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解

    题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4,你应该返回 ...

  6. PAT-进制转换-B1022 D进制的A+B (20分)

    题目描述: 输入两个非负10进制整数A和B(≤230-1),输出A+B的D(1<D≤10)进制数. 输入格式: 输入在一行中依次给出3个整数A.B和D. 样例: 输入:123 456 8 输出: ...

  7. LeetCode--二叉树2--运用递归解决树的问题

    LeetCode--二叉树2--运用递归解决树的问题 在前面的章节中,我们已经介绍了如何利用递归求解树的遍历. 递归是解决树的相关问题最有效和最常用的方法之一. 我们知道,树可以以递归的方式定义为一个 ...

  8. 解决WebMvcConfigurer下的addViewControllers无法找到制定页面

    解决WebMvcConfigurer下的addViewControllers无法找到制定页面 这种都已经配置了拦截跳转,但无效的原因是,没有加载thymeleaf依赖 <dependency&g ...

  9. JAVA GC算法详解

    生存还是死亡 对象是否需要被垃圾收集器回收主要有两种方式:引用计数法和可达性分析算法 引用计数法 给对象添加一个引用计数器,每当有一个地方引用他的时候,计数器的数值就+1,当引用失效时,计数器就-1: ...

  10. 关于IT培训机构的个人看法

    1.前言 缘分与巧合,最近接触比较多的培训机构出来的人,以及看过关于培训机构的文章和问答.虽然没在培训机构上过课,但是接触过很多培训机构出来的人,也看过一些培训机构的课程.关于培训机构,我也有自己的看 ...