Python学习二——标准库

一、OS模块

os模块学习

二、matplotlib模块

(一)模块简介

参考链接
同一个作者的链接

1.matplotlib是python的绘图库,可以与其他库(比如numpy或图形工具包)结合使用,成为一种用matlab绘图的开源替代方案。
2.matplotlib是一个非常庞大的系统,而且从诞生到现在繁荣发展经历了几十年的时间,里面所涉及到的软件架构很是复杂。matplotlib的架构被逻辑性地分为三层。这三层逻辑可以视为一个栈。每层逻辑知道如何与其下的一层逻辑进行通信,但在下层逻辑看来,上层是透明的。这三层从底向上分别为:后端、美工与脚本。
3.matplotlib的使用可以从三个层面上去入手,即“后端——美工——脚本”。

后端bakend layer:我们当然可以从最底层的后端搭建一个图形,负责软件与绘图硬件的交互,图形的各种渲染等等,这异常困难,而且对于程序员的开发效率来说,十分缓慢,因为绘图的框架整个都要自己去搭建,很麻烦。
美工artist layer:这是在后端的基础之上的进一步封装,有一点类似于GDI+绘图方式,我们只关心“ 在哪里画 、用什么笔、 画什么图 ”,所用的笔,所用的颜料,画的图形类型(折线图,条形图,散点图等等)这些已经封装好了,封装是通过一系列的类去完成的。
脚本scripting layer:脚本是matplotlib的更高层封装,也就是我们平时所用的pyplot模块的高级封装,使用脚本,我们再也不用关心这个图形到底是怎么画的了,我们只需要关心画图的效果即可。适用“ 后端 ”、“ 美工 ”、要很多代码才能完成的事,使用脚本一句话就可以实现,如:
plt.plot(x,y,color=‘red’,linewidth=3,linestyle=’–’)

(二) plt.和ax.以及fig的区别

参考链接
Python学习二——标准库_第1张图片

1.Figure:可以理解为画布,画图的第一件事就是创建一个画布,然后再开始绘画。程序为:fig=plt,figure()
2.Axes:注意,它不是坐标轴!!是axis的复数形式。可以理解为坐标轴系们,能对其进行设置各种图形元素,比如图例、标题、标记、栅格等属性。一般是将Axes赋值给ax
3.Axisax.xais/ax.yaix才是坐标轴,对于axis而言,ax,xais和ax.yaix是它的子图,因此这两者都存在Axes这个对象

图像各部分的名称如下图所示
Python学习二——标准库_第2张图片

1.用第二层的美工层——artis layer的画图实例

import matplotlib.pyplot as plt
import numpy as np
a = np.arange(1, 5)
b = a ** 2
c = a ** 3
"""
创建大小为14x7的画布,把这个画布赋值给变量fig,
同时在这个画布上创建了一个axes,把这个axes赋值给ax.
如果有两个图,那么ax就是列表,有两个元素a[0],a[1]
"""
fig, ax = plt.subplots(figsize=(14, 7))
# fig, ax = plt.subplots(2,1,figsize(14,7))
# ax[0].***
# ax[1].***

#  开始画图,在这个axes上画数据,因此就用ax.plot()来画。
ax.plot(a, b)
ax.plot(b, a)
#  细节处理,标题和xy坐标轴的题目搞定
ax.set_title('Title',fontsize=18)
ax.set_xlabel('xlabel', fontsize=18,fontfamily = 'sans-serif',fontstyle='italic')
ax.set_ylabel('ylabel', fontsize='x-large',fontstyle='oblique')
ax.legend(labels=['plot1', 'plot2'])# 要加上labels
#  xy坐标轴的属性设定
ax.set_aspect('equal')
ax.minorticks_on()
ax.set_xlim(0,16)
ax.grid(which='minor', axis='both')
# xy坐标轴的细节,在ax.axis和ax.yaxis上完成
ax.xaxis.set_tick_params(rotation=45,labelsize=18,colors='w')
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end,1))
ax.yaxis.tick_right()
plt.show()# 必须加上这个才能输出图形

注意:
1.输出图形最后都要加上plt.show()
2.图例不论是 plt.legend还是ax.legend都要加上label,不然会报错No handles with labels found to put in legend.——没有发现在图例中放置标签的句柄。

2.用顶层的脚本——scripting layer的画图实例

参考链接:像画图参考链接

2.1二维图像

代码如下所示,注意不论是连续还是离散的点绘图,坐标点的间隔大小决定了图像的顺滑性

import numpy as np
import matplotlib.pyplot as plt # 首先导入包

x = np.arange(-5, 5, 0.5)
y = np.sin(x)

plt.title("demo ")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x, y)# 散点图就在后面加"o",plt.plot(x, y, "or"),r代表红色
plt.show() # 显示图像

2.2三维图像

如果用二维图像的方法则会报错,因为matplotlib.pyplot没有z轴。
1.创建三维坐标轴对象Axes3D
①方法一:用关键字plt.axes(projection='3d')

from matplotlib import pyplot as plt
fig = plt.figure() #定义图像
ax = plt.axes(projection='3d')
plt.show()

②方法二:用三维轴的方法Axes3D

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure() # 定义图像
ax = Axes3D(fig) # 定义三维格式坐标轴
plt.show()

2.三维曲线和散点

# 接着上面的程序
import numpy as np
z = np.linspace(0,13,1000)
x = 5*np.sin(z)
y = 5*np.cos(z)
zd = 13*np.random.random(100)
xd = 5*np.sin(zd)
yd = 5*np.cos(zd)
ax1.scatter3D(xd,yd,zd, cmap='b')  #绘制散点图
ax1.plot3D(x,y,z,'gray')    #绘制空间曲线
plt.show()

3.三维曲面

# 接着1的程序
#定义三维数据
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)

#作图
ax3.plot_surface(X,Y,Z,cmap='rainbow')
#ax3.contour(X,Y,Z, zdim='z',offset=-2,cmap='rainbow)   #等高线图,要设置offset,为Z的最小值
plt.show()
import numpy as np
import matplotlib.pyplot as plt

f = plt.figure()  # 定义图像“相当于找到一张图纸”
ax_0 = plt.axes(projection="3d")
# 用arange的方法设置x,y。建议X与Y设置相同的范围和间隔!!
x = np.arange(-3, 3, 0.1)
y = np.arange(-3, 3, 0.1)

# meshgrid
x, y = np.meshgrid(x, y)
# 写出z的函数表达式
z = np.exp(100 - x ** 2 - y ** 2)
# 绘制图像,cmap参数是设置图形的样式的,rainbow为彩虹状
ax_0.plot_surface(x, y, z, cmap='rainbow')
# 展示出来图像
plt.show()

https://zhuanlan.zhihu.com/p/66306575

你可能感兴趣的:(Python,python)