如果你是新手,不会使用Python作图,那么看完这篇文章,你将会掌握作图的步骤和规律。

第一步:导入包

import matplotlib.pyplot as plt

第二步:创建Figure

fig = plt.figure()

其中,可选参数figsize可以控制的图片大小,fig = plt.figure(figsize=(8,4))

第三步:创建子图

不能通过空Figure绘图,需调用add_subplot创建一个或多个subplot:

ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

用python 用python画图_python


其中,ax1 = fig.add_subplot(2,2,1) 的参数表示构建2x2的子图中的第1个。

当然,如果我们只需要写画一个图的话,只要ax = fig.add_subplot(1,1,1)即可。
第四步:画曲线图
ax.plot(x, y, 'g--')
x,y表示对应要作图的x轴和y轴的坐标,‘g–’ 是用来指定颜色和线型,这里为绿色虚线。
也可以通过这种显示的表达:
ax.plot(x, y, linestyle='--', color='g')
第五步:显示图形
plt.show()
如果在调用该函数时,发现并没有显示图片的话,可以在创建figure前加上plt.close().

合并代码:

import numpy as np
#第一步:导入matplotlib包
import matplotlib.pyplot as plt

#构造一些二维的点,你可以使用自己的数据
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)

#第二步:创建Figure
fig = plt.figure(figsize=(8,6))
#第三步:创建子图 
ax = fig.add_subplot(1, 1, 1)
#第四步:画曲线图
ax.plot(x, y, 'g--')
#第五步:显示图形 
plt.show()

用python 用python画图_matplotlib_02


其他

上面几步可以做出最基本的图,下面可以进行更好的修饰图片:

  • 图片背景颜色
    plt.figure(facecolor='#B7B7B7')控制外面大图的背景,颜色代码可点击参考资料
    fig.add_subplot(1, 1, 1, axisbg='#FFFACD')控制小图的背景色(覆盖在figure创建的图层上)
  • 设置x轴y轴坐标范围
    ax.axis([0, 2*np.pi, -1.2, 1.5])对应参数表示[xmin, xmax, ymin, ymax]
  • 在图中添加文本注释
    ax.text(3, 0.2, 'x=3')表示在(3, 0.2)处添加文本’x=3’
  • 标签
    ax.set_xlabel('x value')添加坐标轴的标签
    ax.set_title('My plot', fontsize=14)添加标题, fontsize为标题字体大小
  • 添加图例
    ax.legend(loc='best')loc表示图例的位置,’best’为自适应最佳位置
  • 打开栅格
    ax.grid(True)
  • 单独标出某个点
    ax.plot(point_x, point_y, 'ro')表示在(point_x, point_y)处标了一个红色的点
  • 带箭头指向的文本注释
    ax.annotate('max', xy=(point_x, point_y), xytext=(2.0, 1.3),\
    arrowprops=dict(facecolor='g', headwidth=12, width=5))
    表示在(point_x, point_y)处标了一个红色的点
    其中,xy对应箭头指向的点,xytext对应文本位置,arrowprops控制箭头属性
  • 修改坐标轴刻度
    ax.set_xticks([0, 1, 2, 3, 4, 5])
    ax.set_xticklabels(['zero','one','two','three','four','five'], rotation=30, fontsize='small')将原来的x轴[0, 1, 2, 3, 4, 5]替换为自定义的[‘zero’,’one’,’two’,’three’,’four’,’five’],rotation为旋转角度,fontsize为字体

完整代码如下:

import numpy as np
#第一步:导入matplotlib包
import matplotlib.pyplot as plt

#构造一些二维的点,你可以使用自己的数据
#在0和2*pi之间产生50个均匀分布,赋值给x
x = np.linspace(0, 2*np.pi, 50)
y1 = np.sin(x)
y2 = np.cos(x)

#第二步:创建Figure
#facecolor控制外面大图的背景
fig = plt.figure(figsize=(8,6), facecolor='#B7B7B7')

#第三步:创建子图 
#axisbg控制小图的背景色(覆盖在figure创建的图层上)
ax = fig.add_subplot(1, 1, 1, axisbg='#FFFACD')

#第四步:画曲线图
#label用来给这条曲线做标签,调用legend()可以显示
ax.plot(x, y1, 'b-', label='sin(x)')  #画y1图像
ax.plot(x, y2, 'r--', label='cos(x)')  #画y2图像

#设置x轴y轴坐标范围,[xmin, xmax, ymin, ymax]
ax.axis([0, 2*np.pi, -1.2, 1.5])

#在图中添加文本注释
ax.text(3, 0.2, 'x=3')

#添加标签
ax.set_xlabel('x value')  #x轴的标签
ax.set_ylabel('y value')  #y轴的标签
ax.set_title('My plot', fontsize=14)  #标题

#添加图例
ax.legend(loc='best')  #loc表示图例的位置

#打开栅格
ax.grid(True)

point_x = np.pi/2.0 #待标注点(point_x,point_y)
point_y = 1
ax.plot(point_x, point_y, 'ro') #先画点
#再画箭头,xy对应箭头指向的点,xytext对应文本位置,arrowprops控制箭头属性
ax.annotate('max', xy=(point_x, point_y), xytext=(2.0, 1.3),\
            arrowprops=dict(facecolor='g', headwidth=12, width=5))

#如果需要修改坐标轴刻度,可以使用下面2句
#ax.set_xticks([0, 1, 2, 3, 4, 5])
#ax.set_xticklabels(['zero','one','two','three','four','five'], rotation=30, fontsize='small') 

#第五步:显示图形 
plt.show()

用python 用python画图_子图_03

以上方法是参考《利用Python进行数据分析》和网上一些资料自己总结的。

我们还可以采用另外一种画图方法,稍有不同,简单介绍一下:

#方法二,稍有不同
import numpy as np
#导入matplotlib包
import matplotlib.pyplot as plt

#构造一些二维的点,你可以使用自己的数据
#在0和2*pi之间产生50个均匀分布,赋值给x
x = np.linspace(0, 2*np.pi, 50)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = y1 + y2

#创建Figure
fig = plt.figure(figsize=(10,8))

#我们创建3个子图
#前面2个数'22'表示2x2的子图,第3个数'1'表示在第1个子图中绘图
plt.subplot(221)
#另一种设置x轴y轴坐标范围的方法
plt.xlim([0, 2*np.pi])  #设置x轴范围
plt.ylim([-1.2, 1.2])
plt.grid(True)  #打开栅格
plt.plot(x, y1)

plt.subplot(222)
#用plt也可以同时设置x,y轴坐标
plt.axis([0, 2*np.pi, -1.2, 1.2])
plt.plot(x, y2)

#可以通过axisbg参数设置图片的背景色
plt.subplot(223, axisbg='#FAFAD2')
plt.plot(x, y3)

plt.show()

用python 用python画图_画图_04

参考资料:《利用Python进行数据分析》第8章

后记:
欢迎点赞,评论和转发,转载请注明出处!
这是我的第一篇博客,每一篇博客我都会用心去写。这不仅是一个记录和分享的过程,同时也是见证自我成长的过程。如果您发现有什么错误,请及时指出来。最后,希望我的博客对你有些许的帮助。