python绘图-matplotlib应用笔记

目录

*
figure/axis/axes/plt分别表示什么?

+
* plt
* Figure:可以解释为画布。
* Axes 是图像中具有数据空间的区域
* Axis 坐标轴
* 总结
图像元素说明

+
* 中文解决问题
* 绘图实例
+ 图像坐标轴调整
参考文章

figure/axis/axes/plt分别表示什么?

python绘图-matplotlib应用笔记

matplot绘图的基础就是由上述图片中的元素所构成,我把他们理解为元素或者模块。画图就是一个一个小的元素组合在一起的结果。

; plt

导入的matplotlib库的api使者,所有后续的操作都是从这个使者引入进来的。

Figure:可以解释为画布。

  • 也就是一切元素堆砌的基础。画图的第一步就是创建画布。

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称
  • figsize:指定figure的宽和高,单位为英寸;
  • dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
  • facecolor:背景颜色
  • edgecolor:边框颜色
  • frameon:是否显示边框
import matplotlib.pyplot as plt
创建自定义图像
fig=plt.figure(figsize=(4,3),facecolor='blue')
plt.show()

Axes 是图像中具有数据空间的区域

可以直接理解为对象、元素。 一个figure中可以包含多个 Axes,但一个给定的 Axes 对象只能在一个图形中。 Axes 包含两个(或在 3D 的情况下为三个)Axis 对象(注意 Axes 和 Axis 之间的区别),它们负责数据限制(数据限制也可以通过 set_xlim() 和 set_ylim 进行设置 () 轴方法)。 每个轴都有一个标题(通过 set_title() 设置)、一个 x 标签(通过 set_xlabel() 设置)和一个通过 set_ylabel() 设置的 y 标签。如果你的figure有subplot,那么每一个subplot就是一个axes。

Axis 坐标轴

每个坐标轴实际上也是由竖线和数字组成的,每一个竖线其实也是一个axis的subplot,因此ax.xaxis也存在axes这个对象。对这个axes进行编辑就会修改xaxis图像上的表现。

总结

1、Figure:画布,Axes的容器
2、Axes:图像有效区域。包含坐标轴以及图像
3、Axis:坐标轴
4、画图的时候plt函数或者axes面向对象绘图都可以。

图像元素说明

python绘图-matplotlib应用笔记
  • xlim,ylim指定坐标轴的取值范围,
  • title指定图的名称,
  • xlabel,ylabel设置坐标轴名字及其字体大小,支持Latex语法。
  • yscale对坐标轴刻度值的函数,有log等选项。
  • minorticks_on打开最小刻度线,
  • tick_params(which=’minor’,direction=’in’,width=2,length=4)控制主次刻度线的长度,宽度和朝向,
  • (top=’off’,bottom=’on’,left=’on’,right=’off’)设置主刻度线在上下左右四条边上是否显示,
  • tick_params(labeltop=’off’,labelbottom=’on’,labelleft=’on’,labelright=’off’)设置刻度值(ticklabel)在上下左右四条边上是否显示。
  • xtick([])关闭x轴坐标刻度,yticks([…1],[…2])设置刻度值名称,支持Latex语法。
  • axis(‘off’)关闭坐标轴显示。
  • grid打开网格线,ax.xaxis.grid()打开x轴的网格线,并设置格式。alpha是透明度,值越大透明度越,越不透明。
  • ax.axes.get_yaxis().set_visible(False)设置坐标轴是上的刻度不可见,但轴仍在。
  • ax.xaxis.set_ticks_position(‘top’)设置x轴的刻度是位于哪一条边上,一般选top或者bottom,ax.spines设置上下左右四条边的颜色、线型、位置等,a
  • x.xaxis.set_major_locator等,设置坐标轴主次刻度值的分辨率
  • tick.label1.set_fontsize(15)设置刻度值字体大小。

调整子图之间的相对位置

plt.subplots_adjust(top=0.92, bottom=0.12, left=0.12, right=0.95, hspace=0.25,wspace=0.35)

中文解决问题

程序中引入

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

如果引入以后运行还是出现问题,那就需要下载这个文件的tff文件。并放在指定目录下

yourpath\site-packages\matplotlib\mpl-data\fout\

绘图实例


from email import header
import imp
from re import X
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from datahandler.dataprovider import DataProvider
from datahandler.gtifwriter import GTifWriter
from matplotlib.pyplot import MultipleLocator, title
from matplotlib import font_manager
import os
import datetime

zhfont1 = font_manager.FontProperties(fname=os.path.join(os.path.dirname(os.path.abspath(__file__)),'font/simhei.ttf'))

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.rcParams['figure.figsize'] = (15.0, 12.0)
plt.rcParams['figure.dpi'] = 100
plt.rc('font',family='Times New Roman')
subFontsize = 18
subTitleFontsize = 26
def draw(time,exceldata,hdfdata,title,outfile):

    font = {'family' : 'Times New Roman',
    'weight' : 'normal',
    'size'   : 18,
    }

    x = time[:-1]
    fig,ax=plt.subplots(1,2)

    plt.suptitle(title,
            fontproperties=zhfont1,
            fontsize=subTitleFontsize)
    for i,key in enumerate(exceldata.keys()):
        y1 = exceldata[key][:-1]
        y2 = hdfdata[:,i]
        plt.subplot(121)
        plt.plot(x,y1,linewidth=0.5, color="red",label="{} csv value".format(key))
        plt.subplot(122)
        plt.plot(x,y2,linewidth=0.5, color="blue",label="{} hdf value".format(key))

        print(key)

    x_major_locator=MultipleLocator(25)
    y_major_locator=MultipleLocator(100)

    subtitle = ['CSV文件','HDF文件']
    for i in range(len(ax)):
       '''
       给每一个子图添加坐标轴和标题
       '''
        plt.subplot(1,2,i+1)
        ax[i].xaxis.set_major_locator(x_major_locator)
        ax[i].yaxis.set_major_locator(y_major_locator)
        ax[i].set_xlabel("UTC时间", fontsize=subFontsize,fontproperties=zhfont1)
        ax[i].set_ylabel("Value", fontsize=subFontsize,fontdict=font)
        plt.title(subtitle[i],
            fontproperties=zhfont1,
            fontsize=subTitleFontsize)
        plt.xticks(rotation = 45)
        plt.legend(
            loc = 'upper right',
            prop = {'size':12},
            ncol = 2 )
        plt.xticks(fontsize = subFontsize)
        plt.yticks(fontsize = subFontsize)
    plt.tight_layout()
    plt.savefig(outfile)

结果展示:

python绘图-matplotlib应用笔记

图像坐标轴调整

实验例子需求说明
该图示要求横坐标时间跨度为3天,实时更新数据,纵坐标轴要求表示为科学计数法,并标注横向分割线和纵向边界线。

def draw(x,hdfdata,subtitles,outfile,title,legend,colors,stime = '',etime = '',ymin=10**-4, ymax=10**1,threshold=10**3,yaxis='count/cm**2*KeV*s*sr'):

    font = {'family' : 'Times New Roman',
    'weight' : 'normal',
    'size'   : 14,
    }
    fig, ax = plt.subplots()
    plt.title(title, fontsize='36', fontweight='heavy', pad=42,fontproperties=zhfont1)
    ax.text(1,
                1,
                subtitles[0],
                horizontalalignment='right',
                verticalalignment='bottom',
                transform=ax.transAxes,
                fontproperties=zhfont1,
                fontsize=subTitleFontsize)

    ax.text(0.5,
            1,
            subtitles[1],
            horizontalalignment='center',
            verticalalignment='bottom',
            transform=ax.transAxes,
            fontproperties=zhfont1,
            fontsize=subTitleFontsize)
    ax.text(0,
            1,
            subtitles[2],
            horizontalalignment='left',
            verticalalignment='bottom',
            transform=ax.transAxes,
            fontproperties=zhfont1,
            fontsize=subTitleFontsize)

    x = pd.to_datetime(x)
    for i in range((hdfdata.shape[1])):

        y2 = hdfdata[:,i]
        ax.semilogy(x,y2,linewidth=1, color=colors[i],label="{}".format(legend[i]))

    lims=[np.datetime64(stime), np.datetime64(etime)]
    ax.set_xlim(lims)
    ax.xaxis.set_major_locator(MultipleLocator(0.25))
    ax.set_xlabel("UTC时间", fontsize=subFontsize,fontproperties=zhfont1)
    ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M'))
    ax.set_ylabel(yaxis, fontsize=subFontsize,fontdict=font)

    ax.set_ylim(ymin, ymax)
    ax.set_yscale('log')
    ax.tick_params(which='minor',length=0)
    plt.legend(
        loc = 'upper right',
        prop = {'size':12},
        ncol = 2)
    plt.xticks(fontsize = subTitleFontsize)
    plt.yticks(fontsize = subTitleFontsize)

    plt.axhline(y=threshold, color='r', linestyle='dashdot',linewidth=1)
    plt.tight_layout()
    print('=========================')
    plt.savefig(outfile)
    plt.close()

python绘图-matplotlib应用笔记

参考文章

plt与Axes绘图对比
边框线及坐标轴的设置
绘图布局
官方案例
官方API

Original: https://blog.csdn.net/Smilelulinlin/article/details/123848684
Author: Smilelulinlin
Title: python绘图-matplotlib应用笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/764795/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • yolov7 网络架构深度解析

    在美团yolov6刚出来不到一个月,yolov4的官方人马yolov7带着论文和代码高调现身,迅速霸屏,膜拜下速度和精度:四个字”多快好省”, yolov7…

    Python 2023年10月9日
    050
  • Scrapy爬虫框架结构及实例

    Scrapy框架 Scrapy介绍 爬虫相关框架有很多,scrapy是目前python中使用最广泛的框架,主要是它的相关扩展组件很多,可配置和可扩展性非常高。Scrapy是一个基于…

    Python 2023年10月3日
    041
  • 用vue+flask做了个音乐播放器(后端部分)

    这篇文章用来接着介绍该音乐播放器的后端部分,因为涉及爬虫不知道会不会被限同时也为了阅读者不会觉得过于繁杂所以分开两篇发。这里是上一篇关于前端部分的介绍。 后端 这里使用的后端是由p…

    Python 2023年8月13日
    093
  • 宝塔面板部署django出现403、502等等问题

    项目场景: 宝塔面板是非常好用的一个管理面板快速,简洁,免费,通用我的项目使用:宝塔+django+uwsgi+nginx进行部署 问题描述: 二次部署django项目时总是显示4…

    Python 2023年8月5日
    050
  • 爬虫中scrapy管道的使用

    每日分享: 不要自卑,你不比别人笨;不要自满,别人不比你笨。你的未来还没定下来,剧本得由你自己来写。读书不是唯一的出路,但却是最容易的出路。为了成为理想中的自己,就这样一步一步前进…

    Python 2023年10月2日
    038
  • python之mysql查询

    数据库地址=’localhost’ 数&…

    Python 2023年8月2日
    055
  • Python—数据分析与可视化编程

    目标: 掌握numpy模块基本操作;掌握matplotlib模块基础操作;掌握pandas模块基础操作。 内容: 1.编写程序,利用pyplot将绘图区域划分成2*1个子绘图区域,…

    Python 2023年8月15日
    068
  • Python图形绘制:如何用Matplotlib和pandas绘图?

    用Matplotlib库绘图 Matplotlib是一个非常好用的高质量绘图工具库,可以根据输入的数据绘制各种图形,如折线图、柱状图、饼图、散点图等。 1.绘制折线图 折线图是用直…

    Python 2023年9月2日
    049
  • Python教程:常用网页字符串处理技巧

    首先一些Python字符串处理的简易常用的用法。其他的以后用到再补充。 1.去掉重复空格 s = "hello hello hello" s = ‘ ‘.joi…

    Python 2023年5月24日
    091
  • Pygame简易版2048小游戏:超详细解说,看完还不会可以剁手了(附完整源码)

    导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本…

    Python 2023年9月18日
    075
  • Django REST framework JWT

    Django REST framework JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json …

    Python 2023年5月24日
    060
  • python3 生成MD5 方法

    Python 2023年5月24日
    080
  • 机器学习-K近邻(KNN)算法详解

    一、KNN算法描述 KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表。KNN算法属于有监督学习方式的分…

    Python 2023年10月28日
    038
  • 深度学习Week9-YOLOv5-C3模块实现(Pytorch)

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章:Pytorch实战 | 第P8天:YOLOv5-C3模块实现(训练营内部成员可读) *🍖 原作者:K同学啊|接辅…

    Python 2023年10月27日
    074
  • Prokka安装和使用

    原核生物基因组快速注释——Prokka Prokka是一个适用于原核生物的基因组自动注释工具,由墨尔本大学生物信息学家 Torsten Seemann开发。Prokka协调了一套现…

    Python 2023年9月7日
    045
  • Python中在数据框最后添加新的列DataFrame.assign()

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

    Python 2023年8月20日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球