matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦。本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['font.sans-serif']=['simhei']#用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用于正常显示负号

1.利用含有多列数据的DataFrame表格绘图

def plot_cols(data,xlabel=None,ylabel=None,path_file=None,marker=True,len_xticks=10,save=False):""":param data:DataFrame,数据表格--行标题为横坐标,列标题为数据列Series,序列——行标题为横坐标,name为数据列:param xlabel: str,横坐标名称:param ylabel: str,纵坐标名称:param path_file: str,保存文件路径:param marker: bool,是否为每条线添加不同的标记:param len_xticks:int,横坐标显示的值个数:param save: bool,是否保存图片example:data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])plot_cols(data,xlabel='指标',ylabel='指数')"""data.index=data.index.astype(str)plt.figure(figsize=(12,8))markers=['.',',','o','v','^','<','>','1','2','3','4','s','p','*','h','H','+','x','D','d','|','_']#标记符号#如果是DataFrame表格形式,则画出多列;如果是Series,则画出单列if type(data) is pd.core.frame.DataFrame:#是否为每条线添加不同的符号if marker==False:for col in data.columns:plt.plot(data[col],marker='o',label=col)else:for col,marker_ in zip(data.columns,markers):plt.plot(data[col], marker=marker_, label=col)elif type(data) is pd.core.series.Series:plt.plot(data, marker='o', label=data.name)plt.legend(loc='best',fontsize='small')xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被显示的横坐标刻度值的位置plt.xticks(data.index[xticks],rotation=270)plt.ylabel(ylabel,fontsize=15)plt.xlabel(xlabel,fontsize=15)plt.grid(True,alpha=0.2)if save==True:plt.savefig(path_file)if __name__=='__main__':x=np.arange(1,101)data = pd.DataFrame({'a':x*2+3,'b':x*3-4,'c':np.log(x)+9}, index=np.arange(100))plot_cols(data, xlabel='指标', ylabel='指数')

2.将含有两列的DataFrame表格数据作为双轴图

def plot_twins(data,col1,col2,xlabel=None,ylabel1=None,ylabel2=None,len_xticks=10,figsize=(10,6),save_path=None):"""将含有两列的DataFrame表格数据作为双轴图:param data: DataFrame,含有两列的DataFrame表格数据:param col1: str,左图列标题:param col2: str,右图列标题:param xlabel: str,横轴标题:param ylabel1: str,左y轴标题:param ylabel2: str,右y轴标题:param len_xticks: int,显示的刻度个数:param figsize: turple,图大小:param save_path: str,图片保存路径。默认为None,不保存图片:return:example:x=np.arange(0,100)data=pd.DataFrame({'销售额(元)':3*x+np.random.random(100)*100,'增长率(%)':np.random.random(100)},index=pd.date_range('2015-01-23',periods=100,freq='D'))plot_twins(data,col1='销售额(元)',col2='增长率(%)',xlabel=None,ylabel1='销售额(元)',ylabel2='增长率(%)')"""fig=plt.figure(figsize=figsize)#创建一块总画布# 将画板分为四行四列共16个单元格,(0, 0)表示从第一行第一列即第一个单元格开始画图,将第一行的三个单元格作为一个画块作画ax=plt.subplot2grid((1,1),(0,0),rowspan=1,colspan=1)plt.plot(data[col1],label=col1,color='r',marker='^')ax.legend(loc='upper right')#用于显示画布ax的图,切记用 loc= 表示位置ax.set_ylabel(ylabel1)xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被显示的横坐标刻度值的位置ax.set_xticks(data.index[xticks])plt.xticks(rotation=270)twin=ax.twinx()plt.plot(data[col2],label=col2,color='y',marker='o')twin.legend(loc='upper left')twin.set_ylabel(ylabel2)ax.set_xlabel(xlabel)ax.grid(True,alpha=0.2)if save_path!=None: plt.savefig(save_path)if __name__=='__main__':x=np.arange(0,100)data=pd.DataFrame({'销售额(元)':3*x+np.random.random(100)*100,'增长率(%)':np.random.random(100)},index=pd.date_range('2015-01-23',periods=100,freq='D'))plot_twins(data,col1='销售额(元)',col2='增长率(%)',xlabel=None,ylabel1='销售额(元)',ylabel2='增长率(%)')

3.将DataFrame表格中的多列数据绘制成多个图

def plot_figs(data,xlabel=None,ylabels=None,save_path=None,len_xticks=5,length=10,width=3,intervals=1):"""将DataFrame表格中的多列数据绘制成多个图:param data:DataFrame,含有多列的表格:param xlabel:str,横轴标题:param ylabels:list,各个图的纵轴标题:param path_save:str,图片保存路径。默认为None,不保存图片:param len_xticks: int,显示的刻度个数:param length:int,画板长度:param width:int,图画宽度:param intervals:int,图画之间间隔距离:return:example:data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])plot_figs(data,xlabel='标号',ylabels=['a','b','c'])"""cols=data.columnsnum_fig = len(data.columns)fig = plt.figure(figsize=(length, 4*num_fig))  # 创建一块总画布for i in range(0,num_fig):#i=2ax = plt.subplot2grid((num_fig*(width+intervals), 1), (i*(width+intervals), 0), rowspan=width,colspan=1)  # 将画板分为四行四列共16个单元格,(0, 0)表示从第一行第一列即第一个单元格开始画图,将第一行的三个单元格作为一个画块作画ax.plot(data[cols[i]], label=cols[i])ax.legend(loc='upper right')  # 用于显示画布ax1的图,切记用 loc= 表示位置if ylabels!=None:ax.set_ylabel(ylabels[i])if xlabels!=None and i==(num_fig-1):ax.set_xlabel(xlabel)xticks = np.linspace(0, len(data), (len_xticks + 1)).astype(int).tolist()[:-1]  # 被显示的横坐标刻度值的位置ax.set_xticks(data.index[xticks])plt.grid(True,alpha=0.2)if save_path != None: plt.savefig(save_path)if __name__=='__main__':data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])plot_figs(data,xlabel='标号',ylabels=['a','b','c'])

每次使用时,直接将下面文件复制至项目中,从其中引用函数即可
plot_func.py

#绘图函数
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['font.sans-serif']=['simhei']#用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用于正常显示负号def plot_cols(data,xlabel=None,ylabel=None,path_file=None,marker=True,len_xticks=10,save=False):""":param data:DataFrame,数据表格--行标题为横坐标,列标题为数据列Series,序列——行标题为横坐标,name为数据列:param xlabel: str,横坐标名称:param ylabel: str,纵坐标名称:param path_file: str,保存文件路径:param marker: bool,是否为每条线添加不同的标记:param len_xticks:int,横坐标显示的值个数:param save: bool,是否保存图片example:data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])plot_cols(data,xlabel='指标',ylabel='指数')"""data.index=data.index.astype(str)plt.figure(figsize=(12,8))markers=['.',',','o','v','^','<','>','1','2','3','4','s','p','*','h','H','+','x','D','d','|','_']#标记符号#如果是DataFrame表格形式,则画出多列;如果是Series,则画出单列if type(data) is pd.core.frame.DataFrame:#是否为每条线添加不同的符号if marker==False:for col in data.columns:plt.plot(data[col],marker='o',label=col)else:for col,marker_ in zip(data.columns,markers):plt.plot(data[col], marker=marker_, label=col)elif type(data) is pd.core.series.Series:plt.plot(data, marker='o', label=data.name)plt.legend(loc='best',fontsize='small')xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被显示的横坐标刻度值的位置plt.xticks(data.index[xticks],rotation=270)plt.ylabel(ylabel,fontsize=15)plt.xlabel(xlabel,fontsize=15)plt.grid(True,alpha=0.2)if save==True:plt.savefig(path_file)def plot_twins(data,col1,col2,xlabel=None,ylabel1=None,ylabel2=None,len_xticks=10,figsize=(10,6),save_path=None):"""将含有两列的DataFrame表格数据作为双轴图:param data: DataFrame,含有两列的DataFrame表格数据:param col1: str,左图列标题:param col2: str,右图列标题:param xlabel: str,横轴标题:param ylabel1: str,左y轴标题:param ylabel2: str,右y轴标题:param len_xticks: int,显示的刻度个数:param figsize: turple,图大小:param save_path: str,图片保存路径。默认为None,不保存图片:return:example:x=np.arange(0,100)data=pd.DataFrame({'销售额(元)':3*x+np.random.random(100)*100,'增长率(%)':np.random.random(100)},index=pd.date_range('2015-01-23',periods=100,freq='D'))plot_twins(data,col1='销售额(元)',col2='增长率(%)',xlabel=None,ylabel1='销售额(元)',ylabel2='增长率(%)')"""fig=plt.figure(figsize=figsize)#创建一块总画布# 将画板分为四行四列共16个单元格,(0, 0)表示从第一行第一列即第一个单元格开始画图,将第一行的三个单元格作为一个画块作画ax=plt.subplot2grid((1,1),(0,0),rowspan=1,colspan=1)plt.plot(data[col1],label=col1,color='r',marker='^')ax.legend(loc='upper right')#用于显示画布ax的图,切记用 loc= 表示位置ax.set_ylabel(ylabel1)xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被显示的横坐标刻度值的位置ax.set_xticks(data.index[xticks])plt.xticks(rotation=270)twin=ax.twinx()plt.plot(data[col2],label=col2,color='y',marker='o')twin.legend(loc='upper left')twin.set_ylabel(ylabel2)ax.set_xlabel(xlabel)ax.grid(True,alpha=0.2)if save_path!=None: plt.savefig(save_path)def plot_figs(data,xlabel=None,ylabels=None,save_path=None,len_xticks=5,length=10,width=3,intervals=1):"""将DataFrame表格中的多列数据绘制成多个图:param data:DataFrame,含有多列的表格:param xlabel:str,横轴标题:param ylabels:list,各个图的纵轴标题:param path_save:str,图片保存路径。默认为None,不保存图片:param len_xticks: int,显示的刻度个数:param length:int,画板长度:param width:int,图画宽度:param intervals:int,图画之间间隔距离:return:example:data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])plot_figs(data,xlabel='标号',ylabels=['a','b','c'])"""cols=data.columnsnum_fig = len(data.columns)fig = plt.figure(figsize=(length, 4*num_fig))  # 创建一块总画布for i in range(0,num_fig):#i=2ax = plt.subplot2grid((num_fig*(width+intervals), 1), (i*(width+intervals), 0), rowspan=width,colspan=1)  # 将画板分为四行四列共16个单元格,(0, 0)表示从第一行第一列即第一个单元格开始画图,将第一行的三个单元格作为一个画块作画ax.plot(data[cols[i]], label=cols[i])ax.legend(loc='upper right')  # 用于显示画布ax1的图,切记用 loc= 表示位置if ylabels!=None:ax.set_ylabel(ylabels[i])if xlabel!=None and i==(num_fig-1):ax.set_xlabel(xlabel)xticks = np.linspace(0, len(data), (len_xticks + 1)).astype(int).tolist()[:-1]  # 被显示的横坐标刻度值的位置ax.set_xticks(data.index[xticks])plt.grid(True,alpha=0.2)if save_path != None: plt.savefig(save_path)

python的matplotlib常用绘图函数相关推荐

  1. python mat函数的作用_介绍python的matplotlib常用绘图函数

    免费学习推荐:python视频教程 matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦.本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便impo ...

  2. python绘图实例-Python matplotlib基础绘图函数示例

    原标题:Python matplotlib基础绘图函数示例 Pyplot基础图标函数: 函数 说明 plt.plot(x,y,fmt,-) 绘制一个坐标图 plt.boxplot(data,notch ...

  3. Seaborn常用绘图函数-sjs

    Seaborn常用绘图函数 介绍 主题风格 函数 参考 备注 介绍 seaborn是基于Matplotlib的Python数据可视化库.它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形,在M ...

  4. Python使用matplotlib可视化绘图时你可用的颜色有哪些?把色彩可视化出来自己选好了

    Python使用matplotlib可视化绘图时你可用的颜色有哪些?把色彩可视化出来自己选好了 目录 Python使用matplotlib可视化绘图时你可用的颜色有哪些?把色彩可视化出来自己选好了 # ...

  5. python绘图实例-Python使用matplotlib简单绘图示例

    本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...

  6. Python中字符串常用处理函数

    ** Python中字符串常用处理函数 ** 1.len( )函数 用len( )函数计算字符串的长度 2.strip( )函数 删除字符串两边的空白符(包括:'\n'.'\t'.'\r') 注:只能 ...

  7. python数学函数_「分享」关于Python整理的常用数学函数整理

    原标题:「分享」关于Python整理的常用数学函数整理 1.函数说明 abs(number)返回数字的绝对值,如abs(-10)返回10 pow(x,y[,z]) 返回x的y次幂(所得结果对z取模), ...

  8. Python3 matplotlib的绘图函数subplot()简介

    Python3 matplotlib的绘图函数subplot()简介 一.简介 matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制 ...

  9. Python:使用matplotlib进行绘图时中文变成乱码的解决

    QUESTION:Python:使用matplotlib进行绘图时中文变成乱码的解决? ANSWER: 在绘图前加上下面的代码: plt.rcParams['font.sans-serif']=['S ...

最新文章

  1. 计算机视觉与深度学习 | Matlab实现旋转矩阵R到四元数的转换(源代码)
  2. Java 获取向量中的最大值
  3. asp.net 开发知识小结【转】
  4. RBAC权限模型库表设计
  5. 分类图片展示php源码,HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)...
  6. 【超直白】三分钟创建一个小程序
  7. dnf服务器地址修改,修改dnf单机服务器地址
  8. 牛顿莱布尼茨公式 几何解释
  9. 推荐几款好用的去视频水印软件,快来看看吧
  10. Word背景变成豆绿色怎么恢复?
  11. miui patchrom项目开发详细教程(Being updated)
  12. sql 数据存在包含关系的查询
  13. 计算机设备名称在哪里找,如何查看电脑驱动
  14. Swift SwiftUI 必备础库之 01 Introspect
  15. 宁波跨境海关商品订单推送清关及支付宝海关报关
  16. UEStudio 9 注册码
  17. dotnetfx35.exe
  18. 【wpf】Page的Unloaded事件
  19. 为华生物COOH-PEG-MAL羧基-聚乙二醇-马来酰亚胺的简介及应用说明
  20. VS DLL延迟加载技术

热门文章

  1. inux安装使用git
  2. 中标麒麟、linux系统-Sikuli安装操作手册
  3. js---BOM 的理解方法
  4. 安装mang DB on CENT OS
  5. mysql optimizer mrr_mysql8 参考手册--optimizer_switch优化
  6. [20180920]航空航天与国防行业的股票排名
  7. android code修改border颜色,Android自定义TextView边框颜色(动态改变边框颜色以及字体颜色)...
  8. 群处守住嘴,独处守住心
  9. 博君一笑,熊猫烧香恶搞
  10. c++11新特性之完美转发(std::foward)