import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,1000);
y=np.sin(x);
z=np.cos(x**2);
plt.figure(figsize=(8,4),dpi=80);
plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2);
'''
label:所绘制曲线的名字,前后加$,在legend中显示
color:线的颜色,b:blue,g:green,r:red,c:cyan,m:magenta,y:yellow,k:black,w:white
linewidth:线宽
'''
plt.plot(x,z,'b--',label='$cos(x^2)$');
plt.xlabel("Times(s)");
plt.ylabel("Volt");
plt.title("Pyplot First Example");
plt.ylim(-1.2,1.2);
plt.legend();
plt.show();
plt.savefig('test.png',dpi=120);
w=np.linspace(0.1,1000,1000);
p=np.abs(1/(1+0.1j*w));
plt.subplot(221);
plt.plot(w,p,linewidth=2);
plt.subplot(222);
plt.semilogx(w,p,linewidth=2);
plt.subplot(223);
plt.semilogy(w,p,linewidth=2);
plt.subplot(224);
plt.loglog(w,p,linewidth=2);
plt.show();
绘制极坐标子图
theta=np.arange(0,2*np.pi,0.02);
plt.subplot(121,polar=True);
plt.plot(theta,1.4*np.cos(5*theta),'--',linewidth=2);
plt.plot(theta,1.8*np.cos(4*theta),linewidth=2);
plt.rgrids(np.arange(0.5,2,0.5),angle=45);
plt.thetagrids([0,45]);
plt.show();
绘制参数方程
a=1;
t=np.linspace(0,2*np.pi);
x=a*(t-np.sin(t));
y=a*(1-np.cos(t));
plt.plot(x,y);
plt.grid()
plt.show()
绘制柱状图
data=np.loadtxt("china_population.txt")
width=(data[1,0]-data[0,0])*0.4
plt.figure(figsize=(8,5))
plt.bar(data[:,0]-width/2,data[:,1],width,color='r',label="男");
plt.bar(data[:,0]+width/2,data[:,2],width,color='b',label="女");
plt.xlim(-width,10);
plt.xlabel("年龄");
plt.ylabel("人口(千万)")
plt.legend();
plt.show()
绘制直方图
import matplotlib.pyplot as plt
import numpy as np
from pandas import read_csv
datas=read_csv('E:\大学数模论文【清风数学建模整理】\英文比赛论文\hair_dryer_all.csv')
print(datas)
plt.figure(figsize=(8,5))
plt.hist(datas['star_rating'],bins=np.arange(5+1)-0.5,rwidth=0.6)
plt.legend();
plt.show()
绘制箱线图
import matplotlib.pyplot as plt
from pandas import read_csv
datas=read_csv('E:\数学建模\__MACOSX\【课件】第2节 数据预处理\第2节课后作业\iris.csv')
print(datas)
plt.figure(figsize=(10,6))
for i in range(4):
data1=datas.iloc[0:50,i]
data2=datas.iloc[50:100, i]
data3=datas.iloc[100:150, i]
print(data1)
print(data2)
print(data3)
plt.subplot(2,2,i+1)
plt.boxplot((data1,data2,data3),labels=('Iris-setosa','Iris-versicolor','Iris-virginica'))
plt.title(datas.columns[i])
plt.grid(linestyle="--", alpha=0.3)
plt.show()
这里不作详细介绍,相关知识点即python代码参见blog:
https://blog.csdn.net/yeziand01/article/details/85168723?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522161192488516780262562045%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=161192488516780262562045&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-85168723.first_rank_v2_pc_rank_v29_10&utm_term=%25E7%2594%25A8python%25E7%25BB%2598%25E5%2588%25B6%25E7%25AE%25B1%25E7%25BA%25BF%25E5%259B%25BE
其中,箱线图绘制中的函数plt.boxplot()的具体用法参见blog:https://www.cnblogs.com/shanger/p/13041426.html
绘制散列图(即散点图)
plt.plot(np.random.random(100),np.random.random(100),'o')
plt.figure(figsize=(8,4))
x=np.random.random(100)
y=np.random.random(100)
plt.scatter(x,y,s=x*1000,c=y,marker=(5,1),alpha=0.8,lw=2,facecolors='none')
'''x,y:绘制的图像的自变量和因变量,都是数组
s:参数指定点的大小
c:指定点的颜色,可以是数值或数组;c为数值时,通过颜色映射表对应一个颜色,蓝色对应最小值,红色对应最大值;
c为数组时,可以是3列的数组或是4列的数组,对应颜色的rgb
marker:点的形状,第一个参数是多边形的边数,第二个元素代表多边形的样式,
其中,0:多边形
1:星形
2:放射形
3:圆形
alpha:点的透明度
lw:线宽
facecolors:点的填充色,当为none时,没有填充色
'''
plt.xlim(0,1)
plt.ylim(0,1)
plt.show()
图像的载入和现实:
img=plt.imread("B9E4B471F2E5FBE00911F84CFE7B5654.jpg")
'''
读取图像,返回一个Numpy数组,第一个参数为文件名或文件对象,format参数指定图像类型,若省略,由文件扩展名决定图像类型
灰度图像:返回一个数组(M,N)
彩色图像:返回一个数组(M,N,C)
其中,M为图像的高度,N为图像的宽度,C为3或4,为图像的通道数。
'''
print(img.shape)
print(img.dtype)
'''
让图像上下颠倒的方法:
plt.imshow(img[::-1]) #反转图像的第0轴
plt.imshow(img,origin="lower") #以图像的左下角为原点
'''
plt.imshow(img)
plt.show();
plt.imshow(img*1.0)
plt.imshow(img/255.0)
plt.imshow(np.clip(img/200.0,0,1))
plt.show();
plt.imshow(img[:,:,0])
plt.colorbar()
plt.show()
import matplotlib.cm as cm
plt.imshow(img[:,:,0],cmap=cm.copper)
plt.show()
for ax in plt.gcf().axes:
ax.set_axis_off()
ax.set_axis_off()
使用imshow()函数可视化二元函数
y,x=np.ogrid[-2:2:200j,-2:2:200j]
z=x*np.exp(-x**2-y**2)
extent=[np.min(x),np.max(x),np.min(y),np.max(y)]
plt.figure(figsize=(10,3))
plt.subplot(121)
plt.imshow(z,extent=extent,origin="lower")
plt.colorbar()
plt.subplot(122)
plt.imshow(z,extent=extent,cmap=cm.gray,origin="lower")
plt.colorbar()
plt.show()
用等值线图表示二元函数
y,x=np.ogrid[-2:2:200j,-2:2:200j]
z=x*np.exp(-x**2-y**2)
extent=[np.min(x),np.max(x),np.min(y),np.max(y)]
plt.figure(figsize=(10,4))
plt.subplot(121)
cs=plt.contour(z,10,extent=extent)
'''
参数为10,将函数的取值范围分为10个区间,即显示九条等值线
contour()返回一个QuadContourSet对象,传递给clabel(),为等值线标值
'''
plt.clabel(cs)
plt.subplot(122)
plt.contourf(x.reshape(-1),y.reshape(-1),z,20)
'''
前两个参数是计算z时所用的x和y轴上的取样点 ,数组必须是一维的;
20:取值范围等分为20份
# # # contourf()画出的图有填充效果,而contour()没有
'''
plt.show()
使用等值线绘制隐函数图像
y,x=np.ogrid[-1.5:1.5:200j,-1.5:1.5:200j]
f=(x**2+y**2)**4-(x**2-y**2)**2
plt.figure(figsize=(9,4))
plt.subplot(121)
extent=[np.min(x),np.max(x),np.min(y),np.max(y)]
cs=plt.contour(f,extent=extent,levels=[0,0.1],colors=["b","r"],
linestyles=["solid","dashed"],linewidths=[2,2])
plt.subplot(122)
for c in cs.collections:
data=c.get_paths()[0].vertices
plt.plot(data[:,0],data[:,1],color=c.get_color()[0],
linewidth=c.get_linewidth()[0])
plt.show()
三维绘图
import mpl_toolkits.mplot3d
x,y=np.mgrid[-2:2:20j,-2:2:20j]
z=x*np.exp(-x**2-y**2)
ax=plt.subplot(111,projection='3d')
ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.Blues_r)
'''
rstride:行之间的跨度
cstride:列之间的跨度
cmap:颜色映射表
'''
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
plt.show()
from matplotlib import projections
print(projections.get_projection_names())
'''
'3d':3d投影模式
'aitoff', 'hammer', 'lambert', 'mollweide':地图投影
'polar':极坐标投影
'rectilinear':默认的直线投影模式
'''
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(-4,4,0.25)
y=np.arange(-4,4,0.25)
x,y=np.meshgrid(x,y)
r=np.sqrt(x**2+y**2)
z=np.sin(r)
ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap='hot')
plt.show()