Matplotlib绘图程序封装

程序功能:已封装的python中的Matplotlib绘图模块,可绘制科技论文中简单的数据可视化。可实现绘制曲线图、柱状图。可实现线条类型、颜色、宽度的设置、可实现对刻度线坐标字体字号设置、可实现图例、网格设置、可实现图中图等其他设置。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from pylab import *
import numpy as np
from matplotlib.font_manager import FontProperties


#加中文语句

# plt.rcParams['font.sans-serif'] = ['SimHei']   # 解决中文乱码
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False     # 用来正常显示负号
color = ['b','g','r','c','m','y','k','w'] #颜色选择
style = ['-','--','-.',':','.',',','o','v',]#线条类型选择
loc=['upper right','upper left','lower left','lower right','right','center left',
     'center right','lower center','upper center','center']  #图例位置选择
'''
titlename:图片标题名称
xlim:设置x坐标轴的范围(可加可不加)
ylim:设置y坐标轴的范围(可加可不加)
xlabel:图片x轴名称
ylabel:图片y轴名称
ticks:设置关键点的记号标签
a,b:绘图的图片的长宽
'''
class Fig:
    def __init__(self,a,b):
        # self.figure=plt.figure(figsize=(a, b)) #画图中图使用,创建图中图界面并设置图片长和宽
        self.figure,self.ax = plt.subplots(figsize=(a,b))
        self.show=plt.show()
        
  #绘图
    '''
    x:输入x的数据代表x轴长度时间
    y:输出y的数据是一个列表,如[d,e,f],与输入x个数对应,也是代表三组数据,出三条线
    lable:图例的名称 是一个列表,里面是字符串,如["第一个图例","第二个图例","第三个图例"]
    linewidth:线条宽度
    color:线条颜色,是一个列表,里面是字符串。如["r","g","y"]
    style:线条类型选择
    leged:图例的位置(1,1)这种类型
    titlename:图的标题名
    xlabel:x轴名称
    ylabel:y轴名称
    a:是否选择一张图中出多个图,1代表选择,其他代表不选择
    b:plt.subplot(b,c,d)函数里的画几个图
    c:plt.subplot(b,c,d)画几列
    d:plt.subplot(b,c,d)里的第几个
    e:是否选择自己设置坐标轴刻度,1代表选择,其他数字不选择
    f:x轴坐标轴刻度范围,(a,b)这种形式,从左到右
    g:y轴坐标轴刻度范围,(a,b)这种形式,从下到上
    font:设置每个图例的字体字号,与输入y对应,为列表数据,可选择font1(英文),font2(中文宋体)
    fony:为y轴坐标字体选择,可选择font1(英文),font2(中文宋体)
    '''
    def fig(self,x,y,lable,linewidth,color,style,leged,titlename,xlabel,ylabel,a,b,c,d,e,f,g,font,fonty):
        #判断是否好几个图
           if a == 1:
                plt.subplot(b,c,d)
           #设置字体为,字号
           font1 = FontProperties(fname=r"c:\windows\fonts\times.ttf",size=25)#英文Times New Roman字体
           font2 = FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=25)#中文宋体
           #为方便选择坐标刻度字体
           for i in range(len(font)):
               if font[i]==1:
                   font[i]=font1
               else:
                    font[i]=font2
           #判断是否需要自制坐标轴刻度,1代表需要
           if e==1:
               plt.xlim(f)#设置坐标轴的刻度,范围 例(0,10)
               plt.ylim(g)#设置坐标轴的刻度,范围 例(-1,1)     
           for i in range(len(y)):#绘制y条线
                plt.plot(x,y[i],label=lable[i],linestyle=style[i],linewidth=linewidth,color=color[i])
                # plt.legend(loc=loc[0],bbox_to_anchor=leged,prop=font[i])
#图例参数解析 bbox_to_anchor=(num1,num2) num1 用于控制 legend 的左右移动,值越大越向右边移动,num2 用于控制 legend 的上下移动,
# 值越大,越向上移动。用于微调图例的位置。
                #为方便选择坐标y轴刻度字体设置
           if fonty==1:
                    fonty=font1
           else:
                    fonty=font2
           plt.legend(loc=loc[0],bbox_to_anchor=leged,prop=font[0])#加图例 位置信息,字体,字体大小
           plt.title(titlename)
           plt.xlabel(xlabel,fontproperties=font1,size=30)#图片x轴名称,字体,字号
           plt.ylabel(ylabel,fontproperties=fonty,size=35)#图片y轴名称,字体,字号
           # 添加网格显示
           plt.grid(linestyle="-", alpha=0.8)
           plt.tick_params(direction='in',labelsize=25)#坐标字体大小设置 direction='in'刻度线显示在绘图区内测
           #如下为设置坐标轴刻度的字体
           labels = self.ax.get_xticklabels() + self.ax.get_yticklabels()
           [label.set_fontname('Times New Roman') for label in labels]
         
   #绘制图中图  
    '''
    left1,bottom1,width1,height1 分别代表图中图距离y,x轴的距离,图中图本身的长度和宽度
    x,y 代表 图中图需要画出的x,y的图形
    linewidth,color  图中图中线条的宽度和颜色
    xlim,ylim  图中图所要绘制的x,y的大小长高
    xlabel,ylabel,title  图中图中横坐标,纵坐标 标题的题目
    '''
    def image(self,left1,bottom1,width1,height1,x,y,linewidth,color,style,xlim,ylim,xlabel,ylabel,title):
            # left1,bottom1,width1,height1=left1,bottom1,width1,height1#图中图位置和宽高
            ax2=self.figure.add_axes([left1,bottom1,width1,height1])
            for i in range(len(y)):#图中图中绘制y条线
                plt.plot(x,y[i],linewidth=linewidth,linestyle=style[i],color=color[i])
                
            plt.grid(linestyle="-", alpha=0.8)    #加网格
            plt.xlim(xlim)#图中图的横坐标范围
            plt.ylim(ylim)#图中图的纵坐标范围
            ax2.set_xlabel(xlabel) #设置x轴名字
            ax2.set_ylabel(ylabel)#设置y轴名字
            ax2.set_title(title)#设置题目
            plt.tick_params(direction='in',labelsize=15)#坐标字体大小设置
            #如下为设置坐标轴刻度的字体样式
            labels = ax2.get_xticklabels() + ax2.get_yticklabels()
            [label.set_fontname('Times New Roman') for label in labels]
    #绘制散点图
    def figur(self,x,y,color,label):#x,y,颜色,图例名称
        plt.scatter(x,y,c=color,label=label)#画散点图
        plt.legend(loc='upper left', frameon=False)#加图例
    #绘制柱状图
    '''
    x:x轴数据
    y:y轴数据
    color:柱状图颜色
    title:图标题目
    ylabel:y轴名称
    xlabel:x轴名称
    '''
    def cylinder(self,left1,bottom1,width1,height1,x,y,color,width,ylim,title,xlabel,ylabel,a,b,c):
        ax2=self.figure.add_axes([left1,bottom1,width1,height1])
        plt.ylim(ylim)#图中图的纵坐标范围
        font1 = FontProperties(fname=r"c:\windows\fonts\times.ttf",size=20)
        font2 = FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=20)#中文宋体
        plt.bar(x, y, color =  color, width=width,align =  'center') 
        for x, y in enumerate(y):
            plt.text(x, y , '%s' % y, ha='center', va='bottom',fontproperties=font1,size=20)#柱状图上方数字显示
        plt.ylim(ylim)#图中图的纵坐标范围
        plt.title(title) 
        plt.ylabel(ylabel) 
        plt.xlabel(xlabel,fontproperties=font2) 
        plt.grid(linestyle="-", alpha=0.7)
        plt.tick_params(direction='in',labelsize=16)#坐标字体大小设置 direction='in'刻度线显示在绘图区内测
        plt.xticks(fontproperties = font1,size = 25) #选择x轴坐标字体设置
        labels = ax2.get_xticklabels() + ax2.get_yticklabels()
        [label.set_fontname('Times New Roman') for label in labels]
        #添加文字,第一个参数是x轴坐标,第二个参数是y轴坐标,以数据的刻度为基准,c表示要加的文字
        # plt.text(a,b,c,fontdict={'size':'16.5','color':'k'})   
        plt.text(a,b,c,fontproperties=font2) #图上文字显示字体字号设置
        plt.show()


# #测试代码
# time = np.arange(0, 10,0.01)
# sin = np.sin(time)
# cos = np.cos(time)
# tt=Fig(8,5)

# #demo示例

# tt.fig(time,[sin,cos],['sin(x)','cos(x)'],2,['r','b'],['-','-.'],(1,1),
#         " ",'Time(sec)','yaw Angle(rad)',2,3,1,2,1,(0,10),(-1.5, 2.5))
# #绘制图中图
# tt.image(0.3,0.65,0.3,0.2,time,[sin,cos],2,['r','b'],['-','-.'],
#           (2,8),(-0.8,0.8),"","","")


# # x=['ff','2','3','4','5','6']
# # y=[81.7315,32.9466,6.2922,86.9391,55.3920,7.9238]
# # tt.cylinder(0.3,0.65,0.3,0.2,x,y,'b',2,(-1,1),'','','')
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matplotlib和Seaborn是两个常用的Python绘图库。Matplotlib是一个功能强大且广泛使用的库,它提供了丰富的绘图功能和灵活的配置选项,使用户能够创建各种类型的图形。Seaborn则是Matplotlib的一个定制版,它在Matplotlib的基础上进行了封装和简化,使得绘图更加轻松和美观。 区别在于: 1. 简单性:Seaborn相对于Matplotlib更加简单易用,它提供了一些高级的绘图函数和预设样式,使得用户可以通过使用少量的参数来实现复杂的图形。相比之下,Matplotlib的配置选项更多,需要用户手动进行设置和调整,因此在配置上会相对繁琐一些。 2. 默认样式:Seaborn具有更加美观和现代化的默认样式,使得绘制的图形更加吸引人。而Matplotlib的默认样式相对较为简单和传统。 3. 绘图类型:Matplotlib提供了更多类型的绘图选项,包括折线图、散点图、柱状图、饼图等等。而Seaborn主要专注于统计数据可视化,提供了一些特殊的绘图类型,如分布图、箱线图、热力图等,更适合于数据分析和探索。 4. 配色方案:Seaborn提供了一系列优雅的配色方案,使得绘图更加美观和易于区分。而Matplotlib的配色方案相对较少,用户可能需要手动指定自定义的配色方案。 综上所述,Seaborn相对于Matplotlib来说更加简单易用,拥有更美观的默认样式和优雅的配色方案,适合于快速绘制美观的数据可视化图形。而Matplotlib则提供了更多类型的绘图选项和灵活的配置功能,适合于定制化和高级绘图需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值