python基于Matplotlib模块的绘图2

上一篇博客简单介绍了一些如何进行绘图,和如何设置各种图形格式,这篇博客主要讲解一下一些细节部分以及具体的实例操作。

实例1

有时我们需要绘制一个图形,需要指定它的大小并且将其输出保存下来,这个时候我们需要用到plt.figure函数和plt.savefig()函数,这两个函数前一个是生成一个指定大小的figure,单位是英寸,如果我们不生成,后面也会自动创建。plt.savefig()函数则是保存生成的图像,但在notebook环境中要保存的时候注意不要用show(),否则会阻滞程序运行。下面我们看一个例子。

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']# 支持中文显示
plt.rcParams['axes.unicode_minus'] = False #用来正常正负符号
x =np.linspace(0,10,1000)
y =np.sin(x)
z =np.cos(x**2)
plt.figure(figsize =(8,4))#设置图片大小。8*4大小
plt.plot(x,y,label='$sin(x)$',color="red",linewidth =2)
plt.plot(x,z,"b--",label="$cos(x^2)")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("Pyplot Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.savefig("test.png",dpi =120)#dpi指定图片的分辨率为120,因此输出的图片像素大小为8*120

最后绘制的图形如下:
在这里插入图片描述

绘制多子图

在一般情况下,我们绘图大多只需要绘制一个图就行啦,但有的时候希望一个figure可以包含多个子图,这些子图也称作Axes对象(一个绘图区域),可以用subplot()快速绘制包括多个子图的图表。
函数形式是这样:

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(ax)

一个3位整数或三个独立的整数,用于描述子图的位置。如果三个整数按顺序为nrows,ncols和index,则子图将采用nrows 行和ncols列的网格上的索引位置。index从左上角的1​​开始,向右增加。

pos是一个三位整数,其中第一个数字是行数,第二个是列数,第三个是子图的索引。即fig.add_subplot(235)与fig.add_subplot(2,3,5)相同。请注意,所有整数必须小于10才能使此表单生效。
下面看个例子

for idx,color in enumerate("rgbyck"):
    plt.subplot(321+idx, facecolor =color)#321指的是生成一个3行两列,就是六个子图,最左上角是1

在这里插入图片描述
如果希望子图占据整行或者整列,我们可以这样调用subplot()
在这里插入图片描述
通过这个简单的图,我们也大致了解了一下如何利用subplot()绘制多个子图,下面我们还是看一个多个子图的实例。

plt.figure(1)#创建图表1
plt.figure(2)#创建图表2
ax1 = plt.subplot(121)#在图表2中创建子图1
ax2 = plt.subplot(122)#在图表2中创建子图2
x=np.linspace(0,3,100)
for i in range(5):
    plt.figure(1)#选择图表1
    plt.plot(x,np.exp(i*x/3))
    plt.sca(ax1)#选择图表2中的子图1
    plt.plot(x,np.sin(i*x))
    plt.sca(ax2)#选择图表2中的子图2
    plt.plot(x,np.cos(i*x))

在这里插入图片描述
通过这个实例我们基本能够在同时生成多个子图,并且对其进行绘制。做到这里,我们基本实现了简单图形的绘制,以及在图上显示各种操作,那么我们平常还有一种操作也就是绘制分段函数,那么该怎么做,我们下面具体操作一下。

分段函数绘制

假设有一个函数是这样的:
在这里插入图片描述
我们要绘制0-100中100个点的图像,那么该怎么做?
我们可以将这个分段函数转化为一个总函数(但结果还是一样),再将点带入,绘制:

x=np.linspace(0,100,100)
a = [1 if (i<30) else 0 for i in x]
b = [1 if (i>=30 and i<50) else 0 for i in x]
c = [1 if (i>=50) else 0 for i in x]
y = np.cos(x)* a + x * b + np.sin(x)*c
plt.plot(x,y)
plt.show()

在这里插入图片描述
到这里我们基础图像基本可以告一个段落了,下面是我随便绘制的一个案列,大家可以学习参考一下。下次博客着重讲各种图像的绘制。

x = np.linspace(-10,10,50)
y = np.cos(x)
plt.plot(x,y,linestyle=':',marker='o',markerfacecolor = 'red',color ='b',markersize = 10)
plt.title('My Matplotlib pictures')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.annotate("(-5,0)",xy=(-5,0),xytext=(-2.5,0.25),arrowprops=dict(facecolor='green',headwidth = 20, headlength = 20))
plt.annotate("(0,0)",xy=(0,0))
plt.grid()
plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42370313/article/details/100883993