python一matplotlib基本语法

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);    #dpi默认值为80,figsize的两个参数分别为宽度和高度,单位:英寸,宽度的像素为8*80=640像素。
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)$');     #‘b--’规定了线的颜色和类型
plt.xlabel("Times(s)");
plt.ylabel("Volt");
plt.title("Pyplot First Example");
plt.ylim(-1.2,1.2);     #y轴的范围
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);   #设置同心圆栅格大小和文字标注的角度,虚线圈有三个,分别为:0.5,1.0,1.5,沿45度角排列
plt.thetagrids([0,45]);  #设置放射线格栅的角度,只有两条放射线,角度分别为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)  #bins=np.arange(5+1)-0.5,让直方图对齐刻度
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')) #使用matplotlib画箱线图
    plt.title(datas.columns[i])   #获取列索引名称,同理,datas.index用于获取所有的行索引名称
    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')
#这个语句无法单独颜色和大小,可以改用scatter()绘制
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)    #若imshow不展示图像,可以在后面加一个show()
plt.show();

plt.imshow(img*1.0)    #取值范围在0.0-255.0之间的浮点数组,不能正确显示颜色
plt.imshow(img/255.0)    #取值范围在0.0-1.0之间的浮点数组,能正确显示颜色
plt.imshow(np.clip(img/200.0,0,1))  #使用clip显示取值范围,整个图像变亮
plt.show();
#clip函数的用法:https://blog.csdn.net/qq1483661204/article/details/78150203

plt.imshow(img[:,:,0])    #参数为二维数组,显示红色通道
plt.colorbar()            #将颜色映射表在图中显示出来
plt.show()

import matplotlib.cm as cm
plt.imshow(img[:,:,0],cmap=cm.copper)    #使用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]   #类似于arange函数,只不过产生的是二维数组,-2为起始点,2为终点,200j为步长(这里的步长是复数)
z=x*np.exp(-x**2-y**2)
extent=[np.min(x),np.max(x),np.min(y),np.max(y)]   #放入imshow中指定坐标轴的取值范围
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")   #参数cmap指定图像的颜色
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')  #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()

你可能感兴趣的:(笔记,python,数据可视化)