可视化学习
一、matplotlib读书笔记
1、导入模块:import matplotlib.pyplot as plt
2、定义图像窗口:figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num:编号或名称
figsize:画布的大小
dpi:像素
facecolor:画布颜色
edge:边框颜色
frameom:是否显示边框
3、画图:plt.plot(x, y)
4、定义坐标轴范围:plt.xlim()、plt.ylim()
5、定义坐标轴名称:plt.xlabel()、plt.ylabel()
6、定义坐标轴刻度及名称:plt.xticks()、plt.yticks()
7、设置边框颜色:
使用plt.gca()获取当前坐标轴信息。使用.spines设置边框:右侧边框;使用.set_color设置边框颜色:默认白色; 使用.spines设置边框:上边框;使用.set_color设置边框颜色:默认白色;
c= plt.gca()
c.spines['right'].set_color('none')
c.spines['top'].set_color('none')
8、调整刻度位置:ax.xaxis.set_ticks_position()、ax.yaxis.set_ticks_position()
所有位置:top,bottom,both,default,none
9、调整边框(坐标轴)位置:ax.spines[ ].set_position()
位置所有属性:outward,axes,data
10、添加图例:
(1)plt.legend(loc):
loc有多种参数:'best' ,'upper right' , 'upper left', 'lower left' , 'lower right' , 'right' , 'center left' , 'center right' , 'lower center' , 'upper center' , 'center'
(2)使用handles标注(注意逗号):
a, = plt.plot(x, y1, label='linear line')
b, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(handles=[a,b,], labels=['up','down'], loc='best')
11、画点:plt.scatter()
plt.scatter([x0, ], [y0, ], s=50, color='b')
12、添加标注:plt.annotate()
xytexxt是对标注位置的描述,xytext=(左负右正, 上负下正)
arrowprops是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入:arrowprops=dict(arrowstyle, connectionstyle))
13、添加注释:plt.text()
text 的内容其中空格需要用到转字符 \ ,fontdict 设置文本字的大小和颜色。
plt.text(x,y,r'$内容$',fontdict={'size':number,’color‘=’ ‘})
二、制作雷达图
代码如下 :
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 time = ["First", "Second", "Third", "Fourth", "Fifth","Sixth"] 5 grade= [100,98,39,82,73,69,100] 6 plt.figure(figsize = (10, 6)) 7 plt.subplot(polar = True) 8 theta = np.linspace(0, 2 * np.pi, len(grade)) 9 lines,labels = plt.thetagrids(range(0, 360, int(360/len(time))), (time)) 10 11 plt.plot(theta,grade) 12 plt.fill(theta,grade, 'r') 13 plt.legend(labels=('grade'), loc = 'best',frameon = True) 14 plt.title(" zhENie Grade") 15 plt.show()

三、自定义手绘
代码如下:
1 from PIL import Image 2 import numpy as np 3 el=np.pi/2.2 4 az=np.pi/4 5 depth=10 6 im=np.array(Image.open("D:\\python\\python文件\\house.jpg").convert('L')) 7 a=np.asarray(im).astype("float") 8 grad=np.gradient(a) 9 grad_x,grad_y=grad 10 grad_x=grad_x*depth/100 11 grad_y=grad_y*depth/100 12 dx=np.cos(el)*np.cos(az) 13 dy=np.cos(el)*np.cos(az) 14 dz=np.sin(el) 15 A=np.sqrt(grad_x**2+grad_y**2+1.0) 16 uni_x=grad_x/A 17 uni_y=grad_y/A 18 uni_z=1.0/A 19 a2=255*(dx*uni_x+uni_y*dy+dz*uni_z) 20 a2=a2.clip(0,255) 21 im2=Image.fromarray(a2.astype('uint8')) 22 im2.save("D:\\python\\python文件\\househand.png")
图像对比
before:

after:

四、绘画数学方程
绘画z=x*x+y*y
代码如下:
1 from matplotlib import pyplot as plt 2 import numpy as np 3 from mpl_toolkits.mplot3d import Axes3D 4 5 fig = plt.figure() 6 pic = Axes3D(fig) 7 X = np.arange(-2, 2, 0.1) 8 Y = np.arange(-2, 2, 0.1) 9 X, Y = np.meshgrid(X, Y) 10 Z = X**2 + Y**2 11 pic.plot_surface(X, Y, Z) 12 plt.show()
运行结果如下:


浙公网安备 33010602011771号