• Matplotlib的使用


    一、Matplotlib的简单使用

    Python底层绘图库,主要做数据可视化图表。

    (一)Matplotlib的安装

    可通过pip进行安装

    pip install matplotlib  

    (二)简单使用

    1、气温实例

    假设一天24小时,每间隔2小时统计一次气温,这样就统计了12个气温,假设分别为[12,25,13,6,8,20,23,10,15,8,16,18],通过折线图表示。

    from matplotlib import pyplot as plt #导入pyplot
    
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.show() #展示图形

    这样就展示了图形:

    显然,这并不是我们想要的结果,至少坐标轴上的刻度不对呀,这是matplotlib自动为我们生成的,所以我们可以对上面生成的图进行一些设置:

    • 设置图片大小、保存图片到本地
    from matplotlib import pyplot as plt #导入pyplot
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形
    • 调整x、y轴上的刻度
    from matplotlib import pyplot as plt #导入pyplot
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.xticks(x) #修改x刻度 另外也可以自己设置步长 plt.xtickets(x[::2])
    plt.yticks(range(1,31)[::5]) ##修改y刻度 另外也可以自己设置步长
    # plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形

    另外如果想让轴上以字符串的形式显示出来,上面这样做还不够,还需要如下的操作:

    from matplotlib import pyplot as plt #导入pyplot
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    _x_tickets = ['{}点'.format(i) for i in x]
    _y_tickets = ['{}℃'.format(i) for i in range(1,31)]
    
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.xticks(x,_x_tickets,rotation=45) #注意x,_x_tickets的长度必须保持一致,roration是旋转角度
    plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    # plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形

    可以看到图中的汉字没有出现:

    所以,下一步应该让其显示中文汉字,matplotlib默认不支持中文字符,那么如何修改其默认字符呢?

    • 修改默认字符

    方法一:通过matplotlib.rc修改

    方法二:通过matplotlib下的font_manager进行修改

    from matplotlib import pyplot as plt #导入pyplot
    from matplotlib import font_manager
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    #设置中文字体
    my_font = font_manager.FontProperties(fname='C:WindowsFontssimkai.ttf')
    
    _x_tickets = ['{}点'.format(i) for i in x]
    _y_tickets = ['{}℃'.format(i) for i in range(1,31)]
    
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.xticks(x,_x_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    # plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形

    此时,x轴上就有中文了。

    •  给图像添加描述信息
    from matplotlib import pyplot as plt #导入pyplot
    from matplotlib import font_manager
    
    #设置中文字体
    my_font = font_manager.FontProperties(fname='C:WindowsFontssimkai.ttf')
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    plt.xlabel('时间(h)',fontproperties=my_font)
    y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    plt.ylabel('温度(℃)',fontproperties=my_font)
    _x_tickets = ['{}点'.format(i) for i in x]
    _y_tickets = ['{}℃'.format(i) for i in range(1,31)]
    plt.title('温度曲线',fontproperties=my_font)
    plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.xticks(x,_x_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    # plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形

    结果如下:

     2、需求升级

    如果在上面图中画出两条温度曲线,也就是第二天的温度曲线,这时只需要使用plt再画一次即可,如:

    from matplotlib import pyplot as plt #导入pyplot
    from matplotlib import font_manager
    
    #设置中文字体
    my_font = font_manager.FontProperties(fname='C:WindowsFontssimkai.ttf')
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    x1 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    x2 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    plt.xlabel('时间(h)',fontproperties=my_font)
    y1 = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    y2 = [10,8,10,6,8,10,21,10,11,8,15,9]  #数据在y轴,是一个可迭代的对象
    
    plt.ylabel('温度(℃)',fontproperties=my_font)
    _x1_tickets = ['{}点'.format(i) for i in x1]
    _y1_tickets = ['{}℃'.format(i) for i in range(1,31)]
    _x2_tickets = ['{}点'.format(i) for i in x2]
    _y2_tickets = ['{}℃'.format(i) for i in range(1,31)]
    plt.title('温度曲线',fontproperties=my_font)
    plt.plot(x1,y1) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.plot(x2,y2) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.xticks(x1,_x1_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y1_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    plt.xticks(x2,_x2_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y2_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    # plt.savefig('./page2.png')  #保存图片
    plt.show() #展示图形

    结果如下:

    对上面的图中进行属性设置,包括线条颜色、样式、图例等。

    from matplotlib import pyplot as plt #导入pyplot
    from matplotlib import font_manager
    
    #设置中文字体
    my_font = font_manager.FontProperties(fname='C:WindowsFontssimkai.ttf')
    
    plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
    x1 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    x2 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
    plt.xlabel('时间(h)',fontproperties=my_font)
    y1 = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
    y2 = [10,8,10,6,8,10,21,10,11,8,15,9]  #数据在y轴,是一个可迭代的对象
    
    plt.ylabel('温度(℃)',fontproperties=my_font)
    _x1_tickets = ['{}点'.format(i) for i in x1]
    _y1_tickets = ['{}℃'.format(i) for i in range(1,31)]
    _x2_tickets = ['{}点'.format(i) for i in x2]
    _y2_tickets = ['{}℃'.format(i) for i in range(1,31)]
    plt.title('温度曲线',fontproperties=my_font)
    plt.plot(x1,y1,label='第一天') #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
    plt.plot(x2,y2,label='第二天',color='red',linestyle='--',linewidth=5,alpha=0.5) #定义样式.
    plt.xticks(x1,_x1_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y1_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    plt.xticks(x2,_x2_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
    plt.yticks(range(1,31)[::5],_y2_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
    # plt.savefig('./page2.png')  #保存图片
    plt.grid(alpha=0.5) #绘制网格
    plt.legend(prop=my_font,loc="upper left") #添加图例
    plt.show() #展示图形

    结果如下:

     二、总结

     Matplotlib的学习可参考官方中给的文档:https://matplotlib.org/

    在上面简单的实例中,有如下的要点:

    • 绘制折线图
    plt.plot(x,y)
    • 设置图片大小和分辨率
    plt.figure(figsize=(20,8),dpi=80)
    • 保存图片
    plt.savefig('./ex1.png') 
    • 设置x,y刻度
    plt.xticks(x) 
    plt.yticks(range(1,31)[::5]) 
    • 设置x,y轴标题
    plt.xlabel('时间(h)',fontproperties=my_font)
    plt.ylabel('温度(℃)',fontproperties=my_font)
    • 设置字体
    #设置中文字体
    my_font = font_manager.FontProperties(fname='C:WindowsFontssimkai.ttf')
    • 绘制多个图形

    多次使用plt.plot方法即可

    • 添加图例
    plt.legend(prop=my_font,loc="upper left") #添加图例
    • 添加网格
    plt.grid(alpha=0.5) #绘制网格
  • 相关阅读:
    Linux常用命令大全,常用命令总结
    mysql Invalid default value for 'time'
    Laravel 集合 Collection
    WAMP中的mysql设置密码
    laravel jwt 无感刷新token
    laravel tymon/jwt-auth header 发送token
    使用lamp一件安装包 遇到is not within the allowed path(s)的问题
    Linux查看网络和IO性能问题
    jenkins重启导致的项目全部丢失
    算法-排序算法-快速排序
  • 原文地址:https://www.cnblogs.com/shenjianping/p/12149383.html
Copyright © 2020-2023  润新知