您的位置:首页 > 编程语言 > Python开发

python绘图基础—快速绘图和面向对象绘图

2018-01-15 14:53 288 查看
pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。  为了将面向对象的绘图库包装成只使用函数的调用接口,pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示"Get Current Figure"和"Get Current Axes"。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:  plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

快速绘图:

import kNN
import matplotlib.pyplot as plt

datingDataMat, datingLabels = kNN.file2matrix('datingTestSet2.txt')

plt.figure()      #只有一张图的情况下不写会自动生成
plt.subplot(121)
plt.scatter(datingDataMat[:, 1],datingDataMat[:, 2],color='r')
plt.subplot(122)
plt.plot([1,2,3], [4,5,6])
plt.show()




面向对象方法画出相同的图:

import kNN
import matplotlib.pyplot as plt

datingDataMat, datingLabels = kNN.file2matrix('datingTestSet2.txt')

fig = plt.figure()      #创建一张图命名为fig
ax1 = fig.add_subplot(121)  #将fig分成1行2列,第一子图命名为ax1
ax1.scatter(datingDataMat[:, 1],datingDataMat[:, 2],color='r')   #对第一子图ax1画散点图
ax2 = fig.add_subplot(122)  #第二子图命名为ax2
ax2.plot([1,2,3], [4,5,6])  #对第二子图画直线图
plt.show()      #这种写法中每一步操作都有一个对象
同时画两张图:

import kNN
import matplotlib.pyplot as plt

datingDataMat, datingLabels = kNN.file2matrix('datingTestSet2.txt')

fig1 = plt.figure(1)   #建立fig1并选定fig1,下面如果不换对象,操作都是对fig1,在面向对象的写法中,因为每一部都写入了对象,所以不需要考虑写法混乱的情况

ax1 = fig1.add_subplot(121)
ax1.scatter(datingDataMat[:, 1],datingDataMat[:, 2],color='r')
ax2 = fig1.add_subplot(122)
ax2.plot([1,2,3], [4,5,6])

fig2 = plt.figure(2)
ax3 = fig2.add_subplot(111)
ax3.plot([1,2,3], [4,5,6])
plt.show()
快速绘图写法:

import matplotlib.pyplot as plt
plt.figure(1)                # 选定第一张图
plt.subplot(211)             # 选定第一张图中的第一张子图
plt.plot([1,2,3])            # 在第一张图的第一张子图中画
plt.subplot(212)             # 选定第一张图中的第二张子图
plt.plot([4,5,6])            # 在第一张图的第二张子图中画

plt.figure(2)                # 选定第二张图
plt.plot([4,5,6])            # 不写plt.subplot(111)(括号中的111不可省略)默认创建子图subplot(111)

plt.figure(1)                # 切换到figure 1 ; 子图subplot(212)仍旧是当前图
plt.subplot(211)             # 令子图subplot(211)成为figure1的当前图
plt.title('Easy as 1,2,3')   # 添加subplot 211 的标题
在快速绘图中必须要考虑操作对象,不能能混
另外面向对象绘图中加坐标名字和标题要加set_:

import matplotlib.pyplot as plt

x = [5, 6, 7, 8]
y = [7, 8, 5, 6]
fig = plt.figure(1)
ax1 = fig.add_subplot(111)
ax1.plot(x,y)

ax1.set_title('First Chart')
ax1.set_xlabel('x axis')
ax1.set_ylabel('y axis')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐