Python绘图超简洁核心总结

  • 入门阶段
  • 花式阶段
  • 实战DEMO
  • 参考链接


兄弟们,Python啥也不会,如何画出一张最基本的图?相较其他文章,本文特色是体系化,搞清楚画图的来龙去脉,一文掌握画图的核心三板斧及高频操作。

入门阶段


天才第一步,首先应该问下:绘图的基本骨架是什么?

我认为,核心主要有:图幅、横纵坐标、曲线类型(曲线、散点、柱状)。

好开干,先导入对应的工具包:matplotlib

import matplotlib.pyplot as plt  	 # 绘图用
import numpy as np   				# 数据处理用

其次,准备好相关的横纵坐标数据x, y

python plot划线 python画图plt_句柄

图源:ref1

那么如何用Python代码去实现对应功能呢?

基本流程:

  • 横纵坐标数据
  • 绘制图形
  • 图片显示

对应函数:

  • plt.figure(num)
  • 创建画板num,若无入参,则默认为1
  • 返回对应画板句柄
  • plt.plot(x, y, format_string, **kwargs)
  • x:x轴数据,列表或数组,可选
  • y:y轴数据,列表或数组
  • format_string:控制曲线的格式字符串,可选
  • **kwargs:第二组或更多,(x,y,format_string)
  • 注:当绘制多条曲线时,各条曲线的x不能省略
  • plt.show()
  • 无入参,将plot绘制的曲线显示出来

示例:

import matplotlib.pyplot as plt
import numpy as np

x = list(range(32))  # x = [0, 31]
x = np.array(x)      # list转为numpy数组
y = x**2             # y = x^2

plt.figure(1)        # 新建一个画板
plt.plot(x, y)       # 格式控制等可以省略
plt.show()           # 结果显示

花式阶段


更进一步,过了雪中送炭阶段,来点锦上添花的东西。

花式操作:

  • 曲线控制:颜色、粗细、实虚
  • 图例、标题、横纵轴标签
  • 网格线、坐标轴刻度范围
  • 图片保存、关闭

对应函数

  • xlabel(‘xx’),横轴标签名
  • ylabel(‘yy’),纵轴标签名
  • title(‘title’),图标题
  • legend(‘曲线说明’),添加图例说明不同曲线
  • axis([xmin, xmax, ymin, ymax]) ,同时控制xy轴的范围
  • xlim([xmin, xmax]),单独控制x轴的范围
  • ylim([ymin, ymax]),单独控制y轴的范围
  • grid(),显示网格线
  • savefig(‘path with filename’),保存当前figure画板中的图
  • close(fig1),关闭画板,通过figure()函数返回的句柄

实战DEMO


import matplotlib.pyplot as plt      # 绘图用
import numpy as np                   # 数据处理用
import math as mt                    # 数学运算


def data_generation(max_val, band_num):
    freq = range(max_val)
    max_val_lg = mt.log10(max_val)
    band_interval = max_val_lg / band_num
    bands = []
    for i in range(band_num):
        tmp = mt.pow(10, i * band_interval) - 1
        val = int(tmp)
        if val < i:
            val = i
        bands.append(val)
    return bands


def plot_basic(x, y):
    plt.figure(1)
    plt.plot(x, y)
    plt.show()


def plot_advance(x, y0, y1):
    fig2 = plt.figure(2)
    l1 = plt.plot(x, y0, color='r',marker='o', linestyle='dashed', label='Me')   # 返回结果为对线操作的句柄
    l2 = plt.plot(x, y1, color='k',marker='.', linestyle='--', label='You')        # 黑色,linestye: -, --实线
    
    plt.xlabel('time/day')
    plt.ylabel('salary/dollar')
    plt.title('The change of salary')
    plt.legend()                             # 显示图例,即每条线对应 label 中的内容
#     plt.axis([-1, 33, -1, 480])            # [xmin, xmax, ymin, ymax]
    plt.xlim(-1, 33)                         # 或单独设置
    plt.ylim(-1, 280)
#     plt.grid()
    plt.grid(linestyle='--')               # 组合有: -.   -- 
    plt.show()
#    plt.savefig('./salary.jpg')
    fig2.savefig('./salary.jpg')
    # plt.close(fig2)
    
    
if __name__ == "__main__":
    y0 = range(30)                           # 刻画下理想中30天日薪增长情况
    y1 = data_generation(480, 30)
    x  = range(30)
    
    print('start processing...')
    plot_basic(x, y1)
    plot_advance(x, y0, y1)
    print('done!')

效果图如下:

python plot划线 python画图plt_python plot划线_02

更多进阶用法见参考链接,里面涉及如一个画板中绘制多幅子图的方法。

如果小伙伴觉得本文有帮助,欢迎评论留言哦,下一篇总结分享gif动图制作

参考链接


  1. python如何使用Matplotlib画图(基础篇),link
  2. python常用数据作图–matplotlib用法(相关设置及常用图),link