程序员

通过一个简单的图像熟悉matplotlib的用法

2018-09-02  本文已影响82人  UlissesJr

推荐使用jupyder notebook

代码如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-np.pi,np.pi,256,endpoint=True) #np.linspace的作用是实现间隔采样
c,s = np.cos(x),np.sin(x) #对c,s进行函数话的赋值
plt.figure(1)
plt.plot(x,c,color="black",linewidth=1.0,linestyle='-',label='COS',alpha=0.5)
plt.plot(x,s,'b*',label='sin') #alpha透明度 
plt.title("SIN AND COS")  #为图片添加标题
ax = plt.gca()    #gca是轴的编辑器 这里赋值给ax
ax.spines["right"].set_color("none")  #对轴进行颜色和位置的设置 
ax.spines["top"].set_color("none")  
ax.spines["left"].set_position(("data",0))
ax.spines["bottom"].set_position(("data",0))
ax.xaxis.set_ticks_position("bottom")  #设置x轴的数值在轴上的位置
ax.yaxis.set_ticks_position("left")
plt.xticks([-np.pi,-np.pi/2,np.pi/2,np.pi]) #对x轴的坐标刻度进行设置
plt.yticks(np.linspace(-1,1,5,endpoint=True)) #对y轴的坐标刻度进行设置
for label in ax.get_xticklabels() + ax.get_xticklabels():
    label.set_fontsize(16)
    label.set_bbox(dict(facecolor="yellow",edgecolor="red"))
plt.legend(loc="upper left")  #设置图例的位置
plt.grid()  #打印网格线 
# plt.axis([-1,1,-0.5,1]) #设置图像的显示范围
plt.fill_between(x,np.abs(x)<0.5,c,c>0.5,color="green",alpha=0.25)#按照要求对图像进行填充
t = 1
plt.plot([t,t],[0,np.cos(t)],"black",linewidth=1,linestyle="--")#在x=1的位置加一条虚线 
#为这条虚线加一条注释
plt.annotate("cos(1)",xy=(t,np.cos(1)),xycoords="data",xytext=(+10,+30),textcoords="offset points",arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
#xy为注释点、xytext表示注释点的偏移量、textcoords在此处的设置表示偏移为相对偏移、arrowprops设置箭头
plt.show()

图像如下:


    能把上图画出来,也算是对matplotlib入门了。

下面我们来进行子图和多种常用图形的绘制
1.散点图 scatter
#1.散点图 scatter
fig = plt.figure()
fig.add_subplot(3,3,1) #确定子图在整体的位置
n = 128
X= np.random.normal(0,1,n) #X为随机数 个数128个
Y = np.random.normal(0,1,n) #Y为随机数 个数128个 
T = np.arctan2(Y,X) 
# plt.axis([0.025,0.025,0.95,0.95]) #指定显示范围
plt.scatter(X,Y,s=10,c=T,alpha=.5) #s表示点的大小 c表示color alpha透明度
plt.xlim(-1.5,1.5),plt.xticks([]) #xlim表示x的范围
plt.ylim(-1.5,1.5),plt.yticks([])
# plt.axis()
plt.title("scatter")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
2.柱状图 bar
#2.柱状图 bar
fig.add_subplot(3,3,2)
n = 10
X = np.arange(n) #定义一个0-9的数列
Y1 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') ##+表示把Y1放到上面 -号表示把Y2方到下面
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

for x,y in zip(X,Y1):
    plt.text(x+0.4,y+0.05,'%.2f'%y,ha='center',va='bottom')
for x,y in zip(X,Y2):
    plt.text(x+0.4,-y-0.05,'%.2f'%y,ha='center',va='top')
plt.show()
3.饼图 pie
#3.饼图 pie
fig.add_subplot(333)
n = 20
Z = np.ones(n)
Z[-1] *= 2
plt.pie(Z,explode=Z*.05,colors=['%f'%(i/float(n)) for i in range(n)],labels=['%.2f'%(i/float(n)) for i in range(n)])
plt.gca().set_aspect('equal') #设置图像为正圆
plt.xticks([]),plt.yticks([])
plt.show()
4.极坐标 polar
#4.极坐标 polar
fig.add_subplot(334)
n = 20
theta = np.arange(0.0,2*np.pi,2*np.pi/n)
radii = 10*np.random.rand(n)
plt.polar(theta,radii)
plt.show()
5.热图 hot map
#5.热图 hot map
from matplotlib import cm #cm==colormap 用来上色
fig.add_subplot(335)
data = np.random.rand(10,10)
cmap = cm.Blues
map = plt.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=0,vmax=1)
plt.show()
6.3D图 3D
#6.3D图  3D
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax=fig.add_subplot(336,projection="3d") 
ax.scatter(1,1,3,s=100)
plt.show()
7.热力图 heat map
#7.热力图 heat map
fig.add_subplot(3,1,3)
def f(x,y):
    return(1-x/2+x**5+y**3) * np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
plt.contourf(X,Y,f(X,Y),8,alpha=.75,camp=plt.cm.hot)
plt.show()
上一篇下一篇

猜你喜欢

热点阅读