Matplotlib 中常见的图形
- # 导包
- from matplotlib import pyplot as plt
- import numpy as np
折线图
简单线性图
在图表的所有类型中,线性图最为简单。线性图的各个数据点由一条直线来连接. 一对对(x, y)值组成的数据点在图表中的位置取决于两条轴(x和y)的刻度范围
如果要绘制一系列的数据点,需要创建两个Numpy数组. 首先, 创建包含x值的数组, 用作x轴. 再创建包含y值得数组,用作y轴. 完成了两个数组创建,只需要调用plot()函数绘制图像即可
- # 生成[0, 2π]之间的等间距的100个点
- x = np.linspace(0, 2* np.pi,num=100)
- y = np.sin(x)
- plt.plot(x,y)
- plt.show()
绘制样式较全的线形图
- # 设置中文字体,否则中文会出现方框状
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- # 准备 x 和 y
- x = np.linspace(0, 2* np.pi,num=10)
- y = np.sin(x)
- # 调用绘制线性图函数plot()
- plt.plot(x, y,
- color='#3589FF', # 线的颜色
- linestyle=':', # 线的风格
- linewidth=3, # 线的宽度
- marker='o', # 标记点的样式
- markerfacecolor='r', # 标记点的颜色
- markersize=10, # 标记点的大小
- alpha=0.7, # 图形的透明度
- label="cos(x)"
- )
- plt.show()
绘制多条折线
- y1 = np.random.random(6)
- y2 = np.random.random(6)
- x = np.arange(6)
- plt.plot(x, y1, label='沈阳')
- plt.plot(x, y2, label='大连')
- plt.legend(loc='best')
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.title('各城市房价(单位:万)', fontsize=20)
- index_name = ['1月', '2月', '3月', '4月', '5月', '6月']
- plt.xticks(x, index_name)
- plt.show()
- x = np.linspace(0, 2 * np.pi, num=20)
- y = np.sin(x)
- # 调用绘制线性图函数plot()
- plt.plot(x, y,
- color='#3589FF', # 线的颜色
- linestyle=':', # 线的风格
- linewidth=3, # 线的宽度
- marker='o', # 标记点的样式
- markerfacecolor='r', # 标记点的颜色
- markersize=10, # 标记点的大小
- alpha=0.7, # 图形的透明度
- label="sin(x)" #设置图例的label
- )
- siny = y.copy()
- cosy = np.cos(x)
- plt.plot(x, cosy,
- color='y', # 线的颜色
- linestyle='-', # 线的风格
- linewidth=3, # 线的宽度
- marker='*', # 标记点的样式
- markerfacecolor='b', # 标记点的颜色
- markersize=15, # 标记点的大小
- alpha=0.9, # 图形的透明度
- label="cos(x)" #设置图例的label
- )
- # 设置x,y轴的label
- plt.xlabel('时间(s)')
- plt.ylabel('电压(V)')
- plt.legend()
- plt.title('电压随时间变化的线性图')
- # 调用show方法显式
- plt.show()
将DataFrame绘制成线性图
- from pandas import DataFrame,Series
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- # %matplotlib inline
- data_frame = DataFrame({
- '东软熙康': np.random.randint(10, 100, 5),
- '东软医疗': np.random.randint(10, 100, 5),
- '东软睿道': np.random.randint(10, 100, 5),
- })
- plt.plot(data_frame, marker='o')
- # 显示图例
- plt.legend(data_frame, loc=2)
- # 设置x轴刻度标签
- plt.xticks([0, 1, 2, 3, 4], ['first', 'secod', 'third', 'forth', 'fifth'])
- plt.title('东软子公司1-5月份在职人员数量')
- plt.xlabel('月份')
- plt.ylabel('在职人数(百人)')
- # True 显示网格
- # linestyle 设置线显示的类型(一共四种)
- # color 设置网格的颜色
- # linewidth 设置网格的宽度
- # plt.grid(True, linestyle = "-.", color = "r", linewidth = "3")
- plt.grid()
- # 显示图形
- plt.show()
条状图
条状图也是非常常用的一种图表类型. 条形图是统计图资料分析中最常用的图形。主要特点有:
- 能够使人们一眼看出各个各个项目数据的大小
- 易于比较各个不同项目数据之间的差别
垂直条状图
- import matplotlib.pyplot as plt
- import numpy as np
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- index = np.arange(5)
- values1 = np.random.randint(11, 20, 5)
- values2 = np.random.randint(11, 20, 5)
- values3 = np.random.randint(11, 20, 5)
- # bar宽度
- bar_width = 0.3
- # 每一个bar占0.3宽度
- plt.bar(index-bar_width, values1, width=bar_width, alpha=0.7, label='社保项目1', color='b')
- plt.bar(index, values2, width=bar_width, alpha=0.7, label='社保项目2', color='r')
- plt.bar(index+bar_width, values3, width=bar_width, alpha=0.7, label='社保项目3', color='g')
- # 显示图例
- plt.legend(loc=1)
- # 设置X轴、Y轴数值范围
- # plt.xlim(-0.5, 5)
- # plt.ylim(10, 20)
- plt.axis([-0.6, 5, 10, 20])
- # 设置x轴刻度标签 rotation旋转角度
- plt.xticks(index, ['社保项目'+str(ix) for ix in range(1, 6)], rotation=30)
- # 设置标题
- plt.title('社保项目营收', fontsize=20)
- plt.xlabel('项目类型')
- plt.ylabel('项目合同额(亿元)')
- # 显示数值标签
- for a,b in zip(index, values1):
- plt.text(a-bar_width, b, '%.0f' % b, ha='center', va='bottom', fontsize=7)
- for a,b in zip(index, values2):
- plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=7)
- for a,b in zip(index, values3):
- plt.text(a+bar_width, b, '%.0f' % b, ha='center', va='bottom', fontsize=7)
- # 显示网格
- plt.grid()
- plt.show()
水平条状图
- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- # 绘制水平条状图
- index = np.arange(5)
- values1 = np.random.randint(10, 17, 5)
- values2 = np.random.randint(10, 17, 5)
- values3 = np.random.randint(10, 17, 5)
- # 绘制条状图
- bar_height = 0.3
- plt.barh(index, values1, height=0.3, label='社保项目1', color='r')
- plt.barh(index+bar_height, values2, height=0.3, label='社保项目2', color='b')
- plt.barh(index+bar_height*2, values3, height=0.3, label='社保项目2', color='y')
- # y轴标签
- plt.yticks(index + bar_height, list('ABCDE'))
- # 显示数值标签
- for a, b in zip(values1, index):
- plt.text(a, b, '%.0f' % a, ha='left', va= 'center', fontsize=7)
- for a, b in zip(values2, index):
- plt.text(a, b+bar_height, '%.0f' % a, ha='left', va= 'center', fontsize=7)
- for a, b in zip(values3, index):
- plt.text(a, b+bar_height*2, '%.0f' % a, ha='left', va= 'center', fontsize=7)
- # 设置标题
- plt.title('社保项目营收', fontsize=20)
- plt.xlabel('项目类型')
- plt.ylabel('项目合同额(亿元)')
- plt.axis([0, 20, -0.4, 5])
- plt.legend(loc=4)
- plt.show()
柱状图
柱状图我们经常会用到,我们来看下如何画出柱状图,并在图上标注出数据对应的数值
- import numpy as np
- from matplotlib import pyplot as plt
- k = 10
- # 生成数据 x 和 y
- x = np.arange(k)
- y = np.random.random(k)
- # 画出 x 和 y 的柱状图
- plt.bar(x, y)
- # 增加数值
- for x, y in zip(x, y):
- # 标注数值
- # ha='center' 横向居中对齐
- # va='bottom'纵向底部(顶部)对齐
- plt.text(x, y , '%.2f' % y, ha='center', va='bottom')
- plt.show()
饼图
除了条状图, 饼图也可以用来表示数据,用pie()函数制作饼图很简单
- import matplotlib.pyplot as plt
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- # %matplotlib inline
- # 设置图像大小
- plt.figure(figsize=(9, 9))
- # 设置标签
- labels = ['Java开发', '项目经理', '测试运维人员', 'Python开发', '架构师']
- # 标签对应的值
- values = [6000, 1000, 2000, 7000, 500]
- # 每一个标签饼图的颜色
- colors = ['red', '#FEDD62', 'blue', 'gray', 'green']
- # 那一块内容需要脱离饼图凸显, 可选值0-1
- explode = [0.1, 0.1, 0, 0, 0]
- """
- autopct ='%1.1f%%'表示显示百分比
- shadow显示阴影
- startangle 正值表示逆时针旋转
- """
- plt.pie(values,
- labels=labels,
- colors=colors,
- explode=explode,
- startangle=90,
- shadow=True,
- autopct='%1.1f%%'
- )
- # 设置为标准圆形
- plt.axis('equal')
- # 显示图例
- plt.legend(loc=2)
- plt.title('东软软件工程师人员职位占比')
- plt.show()
散点图
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据
简单的散点图绘制
绘制正态分布
- from matplotlib import pyplot as plt
- import numpy as np
- # 散点 横轴和纵轴都是特征
- x = np.random.normal(0, 1, 10000) # 均值为0 方差为1 正态分布
- y = np.random.normal(0, 1, 10000)
- plt.scatter(x, y, alpha=0.1)
- plt.show()
- x = np.random.normal(0, 1, 10000)
- y = np.random.normal(0, 1, 10000)
- a = -2 + np.random.random(100) * 4
- b = -2 + np.random.random(100) * 4
- plt.scatter(x, y, color='g', alpha=0.1, label='沈阳')
- plt.scatter(a, b, color='r', alpha=0.4, label='大连')
- plt.rcParams["font.sans-serif"] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- plt.legend()
- plt.show()
绘制随机点
- import matplotlib.pylab as plt
- import numpy as np
- # 随机生成500个点
- k = 500
- x = np.random.rand(k)
- y = np.random.rand(k)
- # 生成每个点的大小
- size = np.random.rand(k) * 50
- # 生成每个点的颜色大小
- colour = np.arctan2(x, y)
- plt.scatter(x, y, s=size, c=colour)
- # 添加颜色栏
- plt.colorbar()
- plt.show()
直方图
直方图由竖立在 x 轴上的多个相邻的矩形组成,这些矩形把 x 轴拆分为一段段彼此不重叠的线段(线段两个端点所标识的数据范围也叫面元),矩形的面积跟落在其所对应的面元的元素数量成正比。这种可视化方法常被用于样本分布等统计研究。
pyplot 用于绘制直方图的函数为 hist(),它能够接收一系列样本个体和期望的面元数量作为参数,把样本范围分成多个区间(面元),然后计算每个面元所包含的样本个体的数量
简单直方图
- pop = np.random.randint(0, 100, 10000)
- plt.hist(pop, bins=200)
- plt.show()
画高斯分布直方图
- pop = np.random.normal(0, 1, 1000000)
- plt.hist(pop, bins=1500)
- plt.show()
箱线图
箱线图也称箱须图,能提供有关数据位置和分数情况的相关信息,可表现分散程度差异
利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数、最大值)来描述数据,可粗略看出数据是否具有对称性、分布的分散程度等信息
Matplotlib 中常见的图形的更多相关文章
- Python数据分析--Numpy常用函数介绍(9)--Numpy中几中常见的图形
在NumPy中,所有的标准三角函数如sin.cos.tan等均有对应的通用函数. 一.利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线 ...
- C语言中常见的图形打印总结
直角三角形(靠右直立) 示例实现代码如下: int main(){ int n; int i,j; cin >> n; if(n<= 0){ cout << " ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- Unity项目开发过程中常见的问题,你遇到过吗?
最近看到有朋友问一个unity游戏开发团队,需要掌握哪些知识之类的问题.事实上Unity引擎是一个很灵活的引擎,根据团队开发游戏类型的不同,对人员的要求也有差异,所以不能一概而论.但是,一些在Unit ...
- 使用matplotlib绘制多个图形单独显示
使用matplotlib绘制多个图形单独显示 一 代码 import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspa ...
- JavaFx 中常见的包和类(javafx笔记 )
JavaFx 中常见的包和类(javafx笔记 ) 更多详细内容请参考<Pro JavaFX 8>. javafx.stage 包包含以下类: Stage 类 Stage 类是任何 J ...
- matplotlib简介-高质量图形输出
Matplotlib 是一个用来绘制二维图形的 Python 模块,它克隆了许多 Matlab 中的函数, 用以帮助 Python 用户轻松获得高质量(达到出版水平)的二维图形. 文章来源:http: ...
- 用CSS编写多种常见的图形
用CSS编写多种常见的图形 正方形与长方形 这个是最简单的,直接上代码 <!DOCTYPE html> <html> <head> <title>< ...
- Spring中常见的bean创建异常
Spring中常见的bean创建异常 1. 概述 本次我们将讨论在spring中BeanFactory创建bean实例时经常遇到的异常 org.springframework.beans.fa ...
随机推荐
- 详解http报文(2)-web容器是如何解析http报文的
摘要 在详解http报文一文中,详细介绍了http报文的文本结构.那么作为服务端,web容器是如何解析http报文的呢?本文以jetty和undertow容器为例,来解析web容器是如何处理http报 ...
- Zygote家的大儿子 —— SystemServer
本文基于 Android 9.0 , 代码仓库地址 : android_9.0.0_r45 文中源码链接: SystemServer.java SystemServiceManager.java Sy ...
- C#通过对象属性名修改值
摘自:csdn 给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致. 创建对象实例的两种方法: 1. var obj = As ...
- Go routine 编排框架:oklog/run 包
目录 Go routine 编排框架:oklog/run 包 问题引入 oklog/run 包介绍 使用例子 参考资料 Go routine 编排框架:oklog/run 包 问题引入 oklog/r ...
- Python高级核心技术97讲 ☝☝☝
Python高级核心技术97讲 ☝☝☝ Python高级核心技术97讲 系列教程 学习 教程 Python的标准整数类型是最通用的数字类型.在大多数32位机器上,标准整数类型的取值范围是-2**31 ...
- 可能是把 ZooKeeper 概念讲的最清楚的一篇文章
转载自:https://github.com/Snailclimb/JavaGuide/blob/master/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6/ZooKeep ...
- python学习(内置函数)
1.id()返回对象的内存地址 a = 1 print id(a) print id(1) 2.int()用于将数据类型转换为整型 a = " b = 2 print int(a) + b ...
- Linux低权限用户记录ssh密码
0x01 场景 现在有个攻击场景,就是你拿到了linux外网服务器的webshell,要做内网渗透前肯定要收集信息.其中可以做的一个工作是重新编译ssh来记录管理员的密码信息,信息可以用来撞其他机器的 ...
- [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列
链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...
- openssl生成密钥/证书
一.公钥/私钥/签名/验证签名/加密/解密/非对称加密 对称加密:用同一个密码 加密/解密 文件. 非对称加密:加密用的一个密码,解密用另外一组密码. 加密解密:公钥加密数据,然后私钥解密. 公钥 ...