Matplotlib:python的2D绘图库,可生成绘图/直方图/功率图/条形图/错误图/散点图等。Matplotlib被集成进Anaconda。

网址:https://matplotlib.org

一、绘制基础

常用场景:画点、画线。

pylot基本方法:

方法

说明

title()

标题

xticks(x,ticks,rotation)

设置x轴的刻度,rotation旋转角度

yticks()

设置y轴的刻度

figure(name,figsize=(w,h),dpi=n)

设置图片大小。创建画布有返回值,参数dpi分辨率,figsize画布大小

xlabel(),ylabel()

x/y。通过plt.ylabel(‘纵轴名’)指定轴的名称

plot()

绘制线性图表

axis()

参数是 [xmin, xmax, ymin, ymax] 列表作为参数来指定了各个轴的视口大小

show()

展示方法,展示之后会清空内存中图片,因此要先保存图片再show

savefig()

保存图片参数是保存路径和文件名

legend()

函数作用是给图加上图例,plt.legend([x,y,z])里面的参数使用的是list的的形式将图表的的名称喂给这个函数。

grid()

设置为true添加网格图plt.grid(True, linestyle=’–’, alpha=0.5)

例1:绘制线性图

import matplotlib.pyplot as plt
x=[1,2,5,7,10]
y=[12,1,7,0,3]
plt.plot(x,y)
plt.show()

例2:设置线条的粗细/设置文字等

import matplotlib.pyplot as plt
x=[1,2,5,7,10]
y=[12,1,7,0,3]
#linewidth设置线条宽度
plt.plot(x,y,linewidth=5)
#添加名称
plt.xlabel('x')
plt.ylabel('x&y')
plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
plt.title('多个点折叠')
plt.show()

 

例3:绘制一元二次方程的曲线

#绘制一元二次方程
import matplotlib.pyplot as plt
#200个点的x坐标
x=range(-100,100)
#生成y坐标
y=[i**2 for i in x]
#绘制一元二次方程
plt.plot(x,y)
#调用savefig将一元二次曲线保存为result.jpg
plt.savefig('result.jpg') #如果直接写成plt.savefig('cos')会生成cos.png
plt.show()

 

 例4:绘制正弦余弦曲线

import matplotlib.pyplot as plt
import numpy as np
#生成x坐标(0-10的100个等差数列)
x=np.linspace(0,10,100)
sin_y=np.sin(x)
#绘制正弦曲线
plt.plot(x,sin_y)
#绘制余弦曲线
cos_y=np.cos(x)
plt.plot(x,cos_y)
plt.show()
plt.plot()

 

 例5:将画布分为区域,将图画到画布的指定区域

import matplotlib.pyplot as plt
import numpy as np
#将画布分为区域,将图画到画布的指定区域
x=np.linspace(1,10,100)
#将画布分为2行2列,将图画画到画布的1区域
plt.subplot(2,2,1)
#修改x、y轴的坐标
plt.xlim(-5,20)
plt.ylim(-2,2) plt.plot(x,np.sin(x)) plt.subplot(
2,2,3) plt.plot(x,np.cos(x)) plt.show()

 

改坐标前改坐标后

 二、绘制散点图

 使用scatter函数可以绘制随机点,该函数需要接收x坐标和y坐标的序列。

1)scatter和plot区别:plot绘制图像的速度优于scatter,所以如果画一堆点,而且点的形状没有差别,使用plot;如果点的形式有差别(指点的大小和颜色不同)则必须使用scatter。

2)大小颜色不同的散点,点的个数和颜色的个数要相同;点的个数和点大小的个数可以不同,如果点的个数大于大小的个数,则会循环获取大小—-根据不同的matplotlib版本有关。

例6:sin函数的散点值

import matplotlib.pyplot as plt
import numpy as np
#画散点图
x=np.linspace(0,10,100)  #生成0-10中100个等差值
plt.scatter(x,np.sin(x))
plt.show()

 


例7:绘制100种大小100种颜色的散点图

import matplotlib.pyplot as plt
import numpy as np
import random
np.random.seed(0) #执行多次,每次获取的随机数都是一样的
x=np.random.rand(100)
y=np.random.rand(100)
#生成100种大小
size=np.random.rand(100)*1000  #不同的matplotlib版本,size的个数和x/y个数可以不同/相同
#生成100种颜色
color=np.random.rand(100)
#绘制散点图
plt.scatter(x,y,s=size,c=color,alpha=0.7) #s表示点的大小,c表示点的颜色,alpha表示透明度
plt.show()

 3)绘制不同样式不同颜色的线条

缩写字母

代表颜色

标记缩写

代表的标记格式

b

blue

.

点标记

g

green

,

像素标记也就是默认

r

red

o

大点标记

c

cyan青色

v‘ ‘^’ ‘<’ ‘>

分别是三角形标记的四个方向

m

magenta品红色

s

正方形

y

yellow

p

五角形

k

black

*

五角星

w

white

H’ ‘h

两个方向的六边形

1’ ‘2’ ‘3’ ‘4

三菱线的四个方向

字符

代表的线型

+

+

普通线型

x

x

‘–’

– –虚线

d’ ‘D

d是菱形,D是倒正方形

-.

– .虚线

:

. .虚线

_

下划线型

例8:绘制不同样式不同颜色的线条

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
plt.plot(x,x+0,'--g') #默认‘-’为一条直线
plt.plot(x,x+1,'-.r')
plt.plot(x,x+2,':b')
plt.plot(x,x+3,'.k')
plt.plot(x,x+4,',c')
plt.plot(x,x+5,'*y')
plt.plot(x,x+6,'om')
plt.show()
#使用legend()图例添加图例
import
matplotlib.pyplot as plt import numpy as np x=np.linspace(0,10,100) #使用legend()图例,给plot方法添加参数label plt.plot(x,x+0,'--g',label='--g') #默认‘-’为一条直线 plt.plot(x,x+1,'-.r',label='-.r') plt.plot(x,x+2,':b',label=':b') plt.plot(x,x+3,'.k',label='.k') plt.plot(x,x+4,',c',label='.,c') plt.plot(x,x+5,'*y',label='*y') plt.plot(x,x+6,'om',label='om') plt.legend() #默认的位置在左上角,可以通过loc修改,
例plt.legend(loc='upper left',fancybox=True,framealpha=1,shadow=True,borderpad=1)左上角/边框/透明度/阴影/边框宽度,lower right为右下角 plt.show()

三、绘制柱状图

 bar函数绘制柱状图。

 例9:绘制柱状图

import matplotlib.pyplot as plt
import numpy as np
#创建x/y,x表示年份,y表示x年份的值
x=[1980,1985,1990,1995]
y=[1000,3000,4000,5000]
x_label=['1985年','1985年','1990年','1995年']
#调用bar函数绘制柱状图
plt.bar(x,y,width=3) #width修改柱的宽度,为标准宽度的3倍
#修改中文乱码
plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
#修改x坐标的值
plt.xticks(x,x_label)
#给x/y坐标添加名称
plt.xlabel('年份')
plt.ylabel('销量')
#添加标题title
plt.title('根据年份销量对比')
plt.show()

 例10:bar函数和barh函数

import matplotlib.pyplot as plt
import numpy as np
#生成x/y
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
#将画布分成1行2列,在第一个区域画bar
plt.subplot(1,2,1)
plt.bar(x,y,color='blue')
#在0位置水平方向添加蓝色线条
plt.axhline(0,color='blue',linewidth=2)
#在第二个区域画barh
#barh 将y和x进行对换,竖着方向为x
plt.subplot(1,2,2)
plt.barh(x,y,color='red')
#在0位置垂直方向添加红色线条
plt.axvline(0,color='red',linewidth=3)
plt.show()

例11:柱状图设置不同颜色

import matplotlib.pyplot as plt
import numpy as np
#生成x/y
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
v_bar=plt.bar(x,y,color='blue')
#对y值大于0设置为蓝色,小于0的柱设置为绿色
for bar,height in zip(v_bar,y):
    if height<0:
        bar.set(color='green')    
plt.show()

 

 例12:柱状图实例

import matplotlib.pyplot as plt
import numpy as np
#准备数据
#三部电影的名称
real_names=['千与千寻','玩具总动员','生活大爆炸12']
#三天内票房数
real_num1=[7548,4013,1673]
real_num2=[5453,1840,1080]
real_num3=[4348,2345,1890]
x=np.arange(len(real_names))
#绘制柱状图
width=0.3
plt.bar(x,real_num1,alpha=0.5,width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,alpha=0.5,width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,alpha=0.5,width=width,label=real_names[2])
plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
#设置x坐标的值 第1天  第2天  第3天
x_label=['第{}天'.format(i+1) for i in x]
plt.xticks([i+width for i in x],x_label)
#添加ylabel
plt.ylabel('票房数')
#添加图例
plt.legend()
plt.show()

四、绘制饼状图
使用pie函数,饼状图主要是用来呈现比例的,只有传入比例数据即可。

例13:绘制饼状图

import matplotlib.pyplot as plt
import numpy as np
#准备男、女人数比例
man=71351
woman=68187
man_perc=man/(man+woman)
woman_perc=woman/(man+woman)
#添加名称
labels=['','']
#添加颜色
colors=['blue','red']
#绘制饼状图,labels名称,colors颜色,explode将柱状图分裂,autopct绘制比例为百分比例。
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')
plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
#设置饼状图中字体颜色
for text in autotexts:
    text.set_color('white')
#设置字体大小
for text in texts+autotexts:
    text.set_fontsize(20)
plt.show()

 

 五、绘制直方图

 直方图关注的是分布。hist绘制直方图。

例14:使用randn函数生成1000个正太分布的随机数,使用hist函数绘制这1000个随机数的分布状态

图1:
import
matplotlib.pyplot as plt import numpy as np #生成1000个标准的正太分布随机数 x=np.random.randn(1000) #画正太分布图,修改柱的宽度,使用bins,10个柱放到一起 plt.hist(x,bins=100) plt.show()

 

图2
import matplotlib.pyplot as plt
import numpy as np
#使用np.random.normal()指定期望和均值的正太分布
x=np.random.normal(0,0.8,1000)
y=np.random.normal(-2,1,1000)
z=np.random.normal(3,2,1000)
kwargs=dict(bins=100,alpha=0.5) #alpha是透明度,1为不透明
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()

 

六、绘制等高线图和三维图

 

例15:绘制等高线图(俯视图)

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10,100)
y=np.linspace(-10,10,100)
#计算x和y的相交点X Y
X,Y=np.meshgrid(x,y)
#计算Z的坐标
Z=np.sqrt(X**2+Y**2)
#绘制等高线图
plt.contour(X,Y,Z)   #改为contorf函数,结果为图2
plt.show()


例16:绘制三维图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
#创建X,Y,Z坐标
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
fig=plt.figure()
#创建一个Axes3D的子图放到figure画布里
ax=Axes3D(fig)
ax.plot_trisurf(X,Y,Z)
plt.show()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为min222原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/min222/p/16817452.html