终于到了python数据分析三剑客的最后一课:Matplotlib,一个专门用于绘制图形的库,话不多说,直接进入主题。

内容目录

  • 图形的构成
  • plot样式风格
  • plot保存图像
  • 各种图形绘制

1 图形的构成

1.1 Figure

在绘制图形之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。

import matplotlib.pyplot as plt # 约定俗成的写法from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False   # 解决负号不显示的问题fig = plt.figure()

plt.figure的参数:(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)

  • num: 图像编号或名称,数字为编号 ,字符串为名称
  • figsize: 指定figure的宽和高,单位为英寸
  • dpi: 参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80, 1英寸等于2.5cm,A4纸是 21*30cm的纸张
  • facecolor: 背景颜色
  • edgecolor: 边框颜色
  • frameon: 是否显示边框
fig = plt.figure(num="hakg",figsize=(10,5),facecolor='g')
ax1 = fig.add_subplot(111)
ax1.set(xlabel="x",ylabel='y')
plt.plot(x,y)

这里只是为了展示figure的参数,我知道很丑

1.2 subplot

使用subplot可以在一个界面中显示多张图像。

参数:subplot(nrows,ncols,num,sharex,sharey,subplot_kw,**fig_kw)

  • nrows: subplot的行数
  • ncols: subplot的列数,行X列就是被分成多少个图像区域
  • num: 目前该图像位于第几个位置
  • sharex:所有subplot应该使用相同的X轴刻度(调节xlim将会影响所有的subplot)
  • sharey:所有subplot应该使用相同的Y轴刻度(调节ylim将会影响所有的subplot)
  • subplot_kw:用于创建各subplot的关键字字典
  • **fig_kw:创建figure时的其他关键字

plt.subplot(ijn) i代表划分为几行j为几列,n是指目前在第几个子区域内,这里也可以使用fig.subplot(ijn)

fig = plt.figure()
ax1 = fig.add_subplot(221) # 划分为2行2列四个区域,这是第一个区域,以下以此类推
ax1.set(title="标题1",ylabel='y',xlabel='x')
ax2 = fig.add_subplot(222)
ax2.set(title="标题2",ylabel='y',xlabel='x')
ax3 = fig.add_subplot(223)
ax3.set(title="标题3",ylabel='y',xlabel='x')
ax4 = fig.add_subplot(224)
ax4.set(title="标题4",ylabel='y',xlabel='x')
plt.show()

数据区域的划分顺序为:先行后列

1.3 Axes 轴

在拥有了Figure对象之后,我们还需要有对应的轴 和 标题

xlabel x轴 水平轴标签

ylabel y轴 垂直轴标签

title 标题

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(title="计算",ylabel='y',xlabel='x')
plt.show()

1.4 ticks 刻度

自定义设置x轴和y轴的刻度,但是这个功能一般很少用,默认的结果就能满足需求

x = [1,2,3,4]
y = [5,6,7,8]
plt.xticks([1,2,3,4]) # xticks x轴刻度
plt.yticks([5,6,7,8]) # yticks y轴刻度
plt.plot(x,y)

1.5 图例

plt.legend方法

常用参数:

  • loc 图例的位置,默认是:upper right
  • ncol 图例分几列展示,默认为1
  • fontsize 图例字体大小

loc分类介绍

fontsize:{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}

详细参数参考如下(了解):

两种方式

  • 分别在plot函数中增加label参数,再调用plt.legend()方法显示
  • 直接在legend方法中传入字符串列表

第一种方式

import numpy as np
x = np.linspace(-np.pi,np.pi,num=100)
y = x**2
plt.plot(x,y,label='dist')
plt.plot(x-3,y+2,label='temp')
plt.legend()

第二种方式

import numpy as np
x = np.linspace(-np.pi,np.pi,num=100)
y = x**2
plt.plot(x,y,c='r')
plt.plot(x-3,y+2)
plt.legend(["dist","temp"],loc="upper left",ncol=2)

1.6 网格线

plt.grid()

参数:(b, which, axis, color, linestyle, linewidth,**kwargs)

  • b: True 或 False True就是显示,False就是不显示
  • which: 'major', 'minor', 'both',默认是both
  • axis: ‘both’,‘x’,‘y’,可以选择 y x,也就是指定选择x显示网格线或者y显示网格线,但是我尝试了之后发现不起作用,暂且记住这个功能吧
  • color: 颜色
  • linestyle: 线条
  • linewidth: 线条宽度
x = [1,2,3,4]
y = [5,6,7,8]
x1 = [10,10,12,12]
y1 = [20,15,10,6]
plt.plot(x,y,x1,y1)
plt.grid(True)

1.7 标签内容

plt.text()

参数: (x, y, s, weight="bold", color="b")

  • x: 注释文本内容或者数据标签所在位置的横坐标
  • y: 注释文本内容或者数据标签所在位置的纵坐标
  • s:注释文本内容或者数据标签
  • weight:注释文本内容的粗细风格
  • color:注释文本内容的字体颜色

其中x和yq确定文本在图像中显示的位置

第一种情况,只显示文本内容

x = np.linspace(0.05, 10, 1000)
y = np.sin(x)plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.legend()
plt.text(3.10, 0.09, "y=sin(x)", weight="bold", color="b")
plt.show()

第二种情况,数据标签

例如:柱状图,我们需要在每个柱上显示标签,因此这里操作有点麻烦,需要用到循环

示例

import pandas as pd
data = pd.read_excel('../data/picture_data.xlsx')
data.head()

计算每个部门的人数

dep = data["部门"].value_counts()
b = plt.bar(dep.index,dep.values)
plt.yticks(range(10))
for i in b:plt.text(i.get_x() + i.get_width() / 2,i.get_height()+0.1,str(i.get_height()))
# i.get_x() 获取每个柱型的x轴位置
# i.get_width() 每个柱形的宽度
# i.get_height() 柱形的高度

不得不吐槽一下,这个数据标签,添加起来真心麻烦

2 plot的风格和样式

2.1 color 颜色

支持以下几种形式

  • 1 颜色名称

color颜色,不同字母代表不同颜色,用color或者c

  • 2 HTML十六进制字符串 例如:color=‘#FF0000’ 红色
  • 3 支持RGB 归一化到[0,1] 例如:color=(0.3,0.3,0.3),如果你使用的是(234,23,14)需要分别除以256,归一化之后才能使用。

2.2 marker 图标

^就是三角形,o就是圆点,+就是加号型

如果上面看不太明白的话,可以参考这个,也可以自己手动试一试

符号    对应的图形
o   圆点
p   五边形(看起来也有点像圆点)
h   六边形(看起来也有点像圆点)
H   旋转六边形(两顶点在线上)
d   细菱形
D   菱形
s   正方形
^   上三角
v(小v) 下三角
<    左三角
>    右三角
1   丫(这里称之为下箭头)
2   上箭头
3   左箭头
4   右箭头
,    像素
+  加号
x   叉形
X   粗叉形
-   水平线

2.3 linestyle 线条

2.4 大小

  • linewidth 对于linestyle的线条的宽度设置,默认为2
  • markersize 对于marker图标的大小设置,默认为12

2.5 透明度

alpha参数 [0,1]之间

3 plot保存图像

plt.savefig() 保存图像

参数: (fname, dpi=None, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1, frameon=None)

  • fname 保存的文件位置+文件名,字符串形式
  • dpi 像素

其余的以后用到再研究,基本主要用到的是fname

import numpy as np
x = np.linspace(-np.pi,np.pi,num=100)
y = x**2
plt.plot(x,y)
plt.plot(x-3,y+2)
plt.legend(["dist","temp"])
plt.savefig('./pi')

4 常用图形

4.1 折线图

plt.plot()参数:(x, y, color='green', marker='o', linestyle='dashed',
linewidth=2, markersize=12)

  • x和y对应横轴和纵轴的数据
  • color颜色,不同字母代表不同颜色
  • marker 显示不同的图标
  • linestyle 不同的线
  • linewidth 对于linestyle的线条的宽度设置,默认为2
  • markersize 对于marker图标的大小设置,默认为12

举个例子

x = [1,2,3,4]
y = [5,6,7,8]
plt.subplot(221)
plt.plot(x,y,c='r')
plt.subplot(222)
plt.plot(x,y,c='g',marker='o',linestyle="--")
plt.subplot(223)
plt.plot(x,y,'m^')
plt.subplot(224)
plt.plot(x,y,'y',linestyle=':',linewidth=6)

4.2 柱状图

plt.bar()

import pandas as pd
data = pd.read_excel('../data/picture_data.xlsx')
data.head()

需求1:绘制每个部门的人数总和

dep = data["部门"].value_counts()
b = plt.bar(dep.index,dep.values)
plt.yticks(range(10))
for i in b:plt.text(i.get_x() + i.get_width() / 2,i.get_height()+0.1,str(i.get_height()))

4.3 条形图

plt.barh()

参数:(y, width, height, left, *, align='center')

需求:绘制每个部门的人数总和

b = plt.barh(dep.index,dep.values)
plt.xticks(range(10))
for i in b:plt.text(i.get_width()+0.1,(i.get_y() + i.get_height() / 2),str(i.get_width()))

4.4 直方图

plt.hist()

参数

(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, hold=None, data=None, **kwargs)

  • x:必选参数,绘图数据
  • bins:直方图的长条形数目,可选项,默认为10
  • normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
  • facecolor:长条形的颜色
  • edgecolor:长条形边框的颜色
  • alpha:透明度
sale = data['实发工资']
plt.hist(sale)

2.5 饼图

plt.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, rotatelabels=False, hold=None, data=None)

  • startangle:参数设置饼图的起始角度
  • explode:每一块顶点距离圆心的长度
  • autopct:设置比例值,小数位数保留几位
  • labeldistance: 设置标签离圆心的距离
plt.pie(dep,labels = dep.index,autopct='%.2f%%')

2.6 散点图

plt.scatter()

参数:(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)

h = data.pivot_table(index="部门",aggfunc={"员工姓名":"count","实发工资":"sum"})
plt.scatter(h.员工姓名,h.实发工资)

写到头皮发麻,下回继续,实在没有想到一个matplotlib竟然也有这么多东西要整理。

推荐阅读:

ailsa:Python数据分析:Pandas之DataFrame​zhuanlan.zhihu.com

ailsa:python数据分析:Pandas之Series​zhuanlan.zhihu.com

ailsa:Python数据分析:Numpy基础​zhuanlan.zhihu.com

到这里为止的话,python数据分析的三大库已经全部整理完毕,之前从未觉得知识点有这么多,但是说实话,这些内容算是整理的比较细致了,大家可以当作手册来参考,加油吧!

matplotlib横坐标从大到小_Python数据分析:Matplotlib相关推荐

  1. python ppt 绘图_Python数据分析-Matplotlib绘图基础

    本文结构: 一.Matplotlib绘图基础及中文乱码解决 二.如何利用pandas绘图? 三.如何利用notebook制作分析报告? 图形在我们日常生活中无处不在.如果没有可视化,就是一些数字罗列, ...

  2. python选择排序从大到小_Python实现选择排序

    一.选择排序简介 选择排序(Selection sort)是一种简单直观的排序算法.选择排序首先从待排序列表中找到最小(大)的元素,存放到元素列表的起始位置(与起始位置进行交换),作为已排序序列,第一 ...

  3. matplotlib柱状图上方显示数据_Python数据分析matplotlib可视化之绘图!

    Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单. Python中通过matplotlib模块的pypl ...

  4. python可视化直方图的x轴参数设置_Python数据分析matplotlib可视化之绘图

    Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单. Python中通过matplotlib模块的pypl ...

  5. matplotlib 横坐标少了一个点_比 matplotlib 效率高十倍的数据可视化神器

    点击上方 Z先生点记,加为星标 第一时间收到 Python 技术干货! 来源:优达学城Udacity https://towardsdatascience.com/the-next-level-of- ...

  6. Python 数据分析——Matplotlib相关知识

    Python 数据分析--Matplotlib相关知识 第五章 Matplotlib相关知识 -- 样式 文章目录 Python 数据分析--Matplotlib相关知识 前言 一.matplotli ...

  7. 数据分析--matplotlib 设置时间数据的刻度格式

    数据分析--matplotlib 设置时间数据的刻度格式 数据分析--matplotlib 设置时间数据的刻度格式 数据分析–matplotlib 设置时间数据的刻度格式 在绘制图表时, 如果横轴是p ...

  8. 大数据分析——Matplotlib入门教程

    文章目录 1.问题区 2. matplotlib.pyplot简介 1.Pyplot中的基础函数解析 3. 使用Matplotlib画图基本步骤 1.基础方法解析 : 2.基础参数解析: (1)Lin ...

  9. python画小汽车代码_Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...

最新文章

  1. Android inline hook手记
  2. 热电偶单片机代码c语言,基于STC12C5A60S2单片机的恒温箱设计-LCD1602-热电偶(电路图+程序源码)...
  3. 【python】抄写大神的百度贴吧代码
  4. 不关注公众号可以获取openid吗_微信公众号粉丝迁移
  5. linux查询机器信息,linux_机器信息查询
  6. webview是什么东西_做性能优化前需要考虑什么?
  7. 给控件做数字签名之二:生成证书文件
  8. 新安装的centos使用ifconfig无效或者无法使用的解决办法
  9. 高效办公|用一套键鼠控制两台电脑解决方案
  10. 《菜菜的机器学习sklearn课堂,tomcat架构解析pdf
  11. WordPress小程序搭建之免费开源小程序
  12. Python开源机器学习项目实战
  13. Towards Fine-Grained Prosody Control for Voice Conversion 论文理解
  14. 1.UITextField使用详解
  15. 新版微信支持鸿蒙os,微信突然宣布!“新功能”全面爆发,鸿蒙OS措手不及
  16. CentOS7安装RabbitMQ(解决guest用户无法登录问题)
  17. 轮换对称性实质 和差化积公式之sinθ+cosθ推导 rd原理,二重积分坐标系转化为什么多了个r; 二重积分几何意义: 二重积分物理意义: 二重积分求导:
  18. 计算机专业英语求职自我介绍,计算机专业英语面试自我介绍
  19. 银河麒麟禁止抓屏printScreen
  20. selenium 鼠标悬停事件

热门文章

  1. 中国运动健身人群分析报告出炉,看看哪些人在偷偷变瘦
  2. visio图片自适应贴边,存储为pdf
  3. 关于fixed-point
  4. python统计图片的纹理信息_python实现LBP方法提取图像纹理特征实现分类
  5. 苹果电脑pdf文件过大如何缩小?Mac版压缩pdf文件大小?
  6. ubuntu测试视频采集卡_如何对您的视频卡进行基准测试(并可以与他人进行比较)...
  7. dmp数据覆盖恢复(自用 记录)
  8. python扫描文件代码
  9. 如何转换图片的格式?分享五种简单好用的转换方法
  10. hxd帮我把这个程序写成程序流程图可以吗!!!