Matplotlib自学指南
2018-03-11 本文已影响0人
Ucan先生
欲善其事,先利其器 pycharm使用matplotlib
1在pycharm中安装matplotlib
file->setting->project matplotlib->project Interpreter
1使用matplotlib库绘图,原理很简单,就是下面这5步:
image.png
2pycharm中正常显示图形界面
在代码前面加上
import matplotlib as mpl
mpl.use('TkAgg')
image.png
2 常用图形示例
绘制直线图
示例1
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
line1.png
示例2
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#定义点 此处坐标问题 前一个列表表示x轴横坐标 后面一个表y轴纵坐标 前后对应 上例中未写则默认列表索引0,1,2,3,4,....顺序
plt.plot([3,5,7,9],[1,2,3,4])
#x标题
plt.ylabel('x title')
#y标题
plt.xlabel('y title')
#标题
plt.title('title')
plt.show()
image.png
点图
示例
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#定义点 o代表点 b代表颜色blue r则代表颜色red
plt.plot([3,5,7,9],[1,2,3,4],'bo')
#x标题
plt.ylabel('x title')
#y标题
plt.xlabel('y title')
#标题
plt.title('title')
plt.show()
image.png
曲线图
示例1
f(x) = sin(x) 正弦函数曲线图 同理余弦函数图 f(x) = cos(x)
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据类(常用于深度学习中,大数据中)
import numpy as np
#表示从0->5 之间间隔0.1生成列表
x = np.arange(-3.2, 3.2, 0.1)
#示例打印x查看数据结构
print(x)
#正弦公式 同理 y = np.cos(x) 切换余弦公式
y = np.sin(x)
plt.plot(x, y)
plt.show()
image.png
示例2
综合示例
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#表示从0->5 之间间隔0.1生成列表
x = np.arange(-3.2, 3.2, 0.1)
print(x)
y = np.sin(x)
plt.plot(x, y)
#此处在sin(x) 上面 间隔 0.5画sin(x)的点
m = np.arange(-3.2,3.2,0.5)
n = np.sin(m)
# bo表示蓝色小点,去掉则为直线
plt.plot(m,n,'bo')
#此处在话cox()x+0.2的直线
z = np.cos(x)
plt.plot(x,z)
#取cos(x)上最大值进行标记
#初始化列表x的第0项为最大值
maxIndex = 0
max = x[maxIndex]
#对x进行循环 并计算出最大值的点以及索引位置
for index in range(len(x)):
b = np.cos(x[index])
if(b>max):
max = b
maxIndex = index
#计算最大值对应的横坐标值
xVal = -3.2+0.1*maxIndex
#画点
plt.plot([xVal],max,'yo')
plt.show()
image.png
示例3
公式示例: 本例展现了ch(x) sh(x) th(x) 三个例子
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#定义双曲余弦 正弦 正切
def ch(num):
return (np.e**num + np.e**(-num))/2
def sh(num):
return (np.e**num - np.e**(-num))/2
def th(num):
return (np.e**num - np.e**(-num))/(np.e**num + np.e**(-num))
xValues = np.arange(-10,10,0.1)
zValues = np.arange(-10,10,1)
#坐标轴的移动
plt.axis()
l=[-10,10,-10,10]
plt.axis(l)
plt.axhline()
plt.axvline()
plt.axhline(4)
#根据公式计算纵坐标
shValues = sh(xValues)
chValues = ch(xValues)
sValues = th(zValues)
thValues = th(xValues)
#画图
plt.plot(xValues,thValues)
plt.plot(xValues,shValues)
plt.plot(xValues,chValues)
plt.plot(zValues,sValues,'ro')
plt.plot(xValues,xValues)
plt.show()
image.png
饼图
示例1
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#定义标签
labels = 'A','B','C','D','E','F'
#定义各部分组成
fracs = [15.5,20.8,18.7,30.6,40,50]
#定义偏离值
explode = [0,0,0,0,0.1,0]
#定义颜色
#colors = ['red','blue','yellow','green','orange','#A9A9A9']
plt.pie(x=fracs,explode=explode,labels=labels,shadow=True,labeldistance=1.2,startangle=30,autopct='%3.1f %%')
plt.show()
image.png
柱状图
示例1最简单的柱状图
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#定义数据
data = [10,20,50,100,30,70]
#bar(left, height, width=0.8, bottom=None) left为x轴方向值 height为y方向值 width为相对宽度
plt.bar(range(len(data)),data,width=0.4)
plt.show()
image.png
示例2 尝试改变横坐标值,底部高度,颜色
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#定义数据
left = [1,4,6,9,12,14]
data = [10,20,50,100,30,70]
bottom = [5,10,15,20,25,30]
#设置颜色
color = ['red','blue','yellow','pink','purple','black']
#bar(left, height, width, bottom) left为x轴方向值 height为y方向值 width为相对宽度 bottom为底部高度
plt.bar(left,data,0.4,bottom,color=color)
plt.show()
image.png
示例3 柱状图样式设置 边框样式|填充|填充颜色|填充样式
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类
import numpy as np
#定义数据
left = [1,4,6,9,12,14]
data = [10,20,50,100,30,70]
bottom = [5,10,15,20,25,30]
#设置颜色 可以不传或者只传一个值如 color = 'blue'
color = ['red','blue','yellow','pink','purple','black']
#bar(left, height, width, bottom) left为x轴方向值 height为y方向值 width为相对宽度 bottom为底部高度
# ec代表填充的颜色 lw 表示边框粗细 hatch表示填充样式 ,可取值为: / , \ , | , - , + , x , o , O , . , *
# ls表示linestyle即边框样式 风格有 -实线 --虚线 -.虚线和点结合 :点线
plt.bar(left,data,1,bottom,color=color,ec = 'blue',lw=1,hatch='o',ls='-.')
plt.show()
image.png
示例4 上下堆叠型
#有中文出现的情况,需要u'内容'
import math
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#coding:utf-8 解决中文不显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#python中常用的数据处理类
import numpy as np
#定义数据
size = 5
num = 100
x = np.arange(size)
a = np.random.random(size)
b = 1-a
print(x)
print(a)
print(b)
plt.bar(x,a*num,label='a',color='red')
plt.bar(x,b*num,bottom=a*num,label='b',color='yellow')
plt.xlabel(u'类别')
plt.ylabel(u'数量')
label=['x类别','y类别','z类别','a类别','b类别']
#设置x轴标签
plt.xticks(x, label, rotation=40)
plt.legend()
plt.show()
image.png
示例5 左右堆叠型
# 有中文出现的情况,需要u'内容'
import math
# 引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
# 引入画图类库
import matplotlib.pyplot as plt
# coding:utf-8 解决中文不显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# python中常用的数据处理类
import numpy as np
# 定义数据
size = 5
num = 100
x = np.arange(size)
a = np.random.random(size)
b = 1 - a
print(x)
print(a)
print(b)
#此处类似上线堆叠 移动左右一个宽度的位置
plt.bar(x, a * num, width=0.2, label='a', color='red')
plt.bar(x + 0.2, b * num, width=0.2, label='b', color='yellow')
plt.xlabel(u'类别')
plt.ylabel(u'数量')
label = ['x类别', 'y类别', 'z类别', 'a类别', 'b类别']
# 设置x轴标签
plt.xticks(x, label, rotation=40)
plt.legend()
plt.show()
image.png
示例6
# 有中文出现的情况,需要u'内容'
import math
# 引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
# 引入画图类库
import matplotlib.pyplot as plt
# coding:utf-8 解决中文不显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# python中常用的数据处理类
import numpy as np
# 定义数据
a = np.array([50, 20, 100, 120, 70])
b = np.array([70, 60, 50, 15, 52])
#水平展示 类似bar用法
plt.barh(range(len(a)), a)
#注释b则仅仅显示单侧
plt.barh(range(len(b)), -b)
plt.show()
image.png
示例7 ❤
(希望某人会看到)
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
def x(t):
return 2*np.cos(t)-np.cos(2*t)
def y(t):
return 5*np.sin(t)-np.sin(2*t)
b = np.arange(-100,100,0.1)
plt.plot(50*y(b),50*x(b),'r-')
plt.show()
image.png
散点图
示例1 f(x) = 2sin(x)+0.3x*x 做正态分布
#引入图形环境
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
# 通过rcParams设置全局横纵轴字体大小
mpl.rcParams['xtick.labelsize'] = 24
mpl.rcParams['ytick.labelsize'] = 24
#定义方法 f(x) = 2*sin(x)*x^2
def func(x):
return 2*np.sin(x)+0.3*x**2
#x轴方向上 (0,5)内采样100个点
x = np.linspace(0,5,100)
y = func(x)
#在y的基础上进行以偏差最大为0.3做正态分布
ydata = y+np.random.normal(scale=0.3,size=100)
引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
引入画图类库
import matplotlib.pyplot as plt
python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
在0,1取500分
x = np.linspace(0, 1, 500)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
y = y+np.random.normal(scale=0.01,size=500)
子图
fig, ax = plt.subplots()
填充图
ax.plot(x, y, '.')
网格图
ax.grid(True, zorder=5)
plt.show()
![image.png](https://img.haomeiwen.com/i11026233/412149479eb80bab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#画图
plt.figure('scatter')
plt.plot(x,ydata,'.')
plt.plot(x,y)
plt.show()
image.png
填充图
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#在0,1取500分
x = np.linspace(0, 1, 500)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
#子图
fig, ax = plt.subplots()
#填充图
ax.fill(x, y, zorder=10)
#网格图
ax.grid(True, zorder=5)
plt.show()
image.png
#引入图形环境
import matplotlib as mpl
mpl.use('TkAgg')
#引入画图类库
import matplotlib.pyplot as plt
#python中常用的数据处理类(常用于深度学习中,大数据中)
import numpy as np
#在0,1取500分
x = np.linspace(0, 1, 500)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
y = y+np.random.normal(scale=0.01,size=500)
#子图
fig, ax = plt.subplots()
#填充图
ax.plot(x, y, '.')
#网格图
ax.grid(True, zorder=5)
plt.show()
image.png