matplotlib数据可视化之标准流程,画图基本结构

本文详细介绍了matplotlib数据可视化的标准流程,强调了plt与ax的区别。通过创建figure,设置subplot,调整坐标轴、刻度、字体样式等参数,揭示了plt.xxx函数如何内部调用ax.xxx方法实现绘图。文中还提到了注释和取值范围的设置方法,是matplotlib初学者的实用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本文使用jupyter编写代码!!!

#先导入包
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline##jupyter可以用,这样就不用plt.show(),但是与使用plt.show()不冲突

#1.了解mpl画图的基本结构和流程。(建议初学用ax.xxx方法绘图,按流程来!!!不然可能很混乱,请区分plt.xxx与ax.xxx的区别,方便对图做修改)
##1)先建一个画板:figure。
#figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)。
#num:表示第几个画板或画板名称;
#figsize:画板大小
#dpi:dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
#facecolor:背景颜色
#edgecolor:边框颜色
#frameon:是否显示边框

fig=plt.figure(num="画图1",figsize=(8,5),dpi=60,facecolor="blue",edgecolor="blue",frameon=True)#(8,5)即长8英寸,宽5英寸

##2)再“贴”画纸ax
#plt.subplot(nrows, ncols, index, **kwargs)
#nrows, ncols, index:对画板分成行×列个区域,索引为第几个区域
#projection : {None, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’, str}, optional:子图类型
#polar : boolean, optional:

ax1=plt.subplot(221)#画纸ax1,而且“贴”在画板的左上角(221的意思是:将画板分为2×2的4个区域,选第一个区域贴画纸)
ax2=plt.subplot(222)#画纸ax2
ax3=plt.subplot(223)#画纸ax3
#ax4=plt.subplot(224)#画纸ax4
fig2,ax=plt.subplots(3,2,figsize=(8,5))#plt.subplots()一下子可以创建所有子图;而plt.subplot()只能一个一个创建
#fig2=plt.figure(num=2,figsize=(10,4),dpi=80,facecolor="red")#facecolor="red"不起作用咋回事???
fig2=plt.figure(num=2,figsize=(10,4),dpi=80)
ax2=plt.subplot(323,projection="aitoff")
plt.show()

在这里插入图片描述
在这里插入图片描述
##3)修改图的参数:坐标轴,主次刻度,取值范围等(以y=x**2图为例)

x=np.linspace(-2,2,20)#生成从-2到2的20个等间距点
y=x**2
#建画板
fig=plt.figure(num=3,figsize=(10,8))
#贴画纸
ax2=plt.subplot(222)
ax2.plot(x,y,linewidth=3,color="red",linestyle="dashed")

#3.1)给坐标轴命名并对字体进行设置
##ax2.ylabel(ylabel=“I am Y aixs”)#AttributeError: ‘AxesSubplot’ object has no attribute ‘ylabel’

plt.ylabel("ues plt.xxx--ylabel",color="blue",fontsize=16,fontfamily="Times New Roman",rotation=85,fontstyle="oblique")

#这个可以,这就是plt.xxx与ax.xxx的其中一个区别(no.1)!!!很多设置函数不一样
##一般用字典形式把字体参数都设置好
#并不是所有的字体都有italic属性,这时候就得用到oblique属性了。
# font-style:oblique是单纯的使文字倾斜,不管该字体有没有italic属性。’’’
# #改变weight 和style
# styles=[‘normal’,‘italic’,‘oblique’]
# weights=[‘light’,‘normal’,‘medium’,‘semibold’,‘bold’,‘heavy’,‘black’]

font={'family':'serif',
     'style':'italic',
    'weight':'normal',
      'color':'red',
      'size':16
}
ax2.set_xlabel('I am X Label',font)

在这里插入图片描述
#3.2)主次刻度

#导入需要的包
from pylab import *
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
x=np.linspace(-20,20,20)
y=x**2
fig=plt.figure(figsize=(10,6))
ax=plt.subplot(221)
ax.plot(x,y)
xmajorLocator=MultipleLocator(10) #将x主刻度标签设置为10的倍数
xminorLocator= MultipleLocator(4) #将x轴次刻度标签设置为4的倍数
xmajorFormatter = FormatStrFormatter('%5.1f') #设置x轴标签文本的格式
#ymajorLocator=MultipleLocator(100)
ax.xaxis.set_major_locator(xmajorLocator)#上面只是设置,这一句才能呈现出想要的主刻度
ax.xaxis.set_minor_locator(xminorLocator)#呈现出次刻度
#ax.xaxis.set_major_formatter(xmajorFormatter)
ax.tick_params(axis="x",direction="out")#为什么主刻度随着direction内外变,但是次刻度总是in呢?(oh,i see!!!参数which默认值就是"major",这是原因)

##Axes.tick_params(axis=‘both’, **kwargs)
#axis : {‘x’, ‘y’, ‘both’}:参数axis的值为’x’、‘y’、‘both’,分别代表设置X轴、Y轴以及同时设置,默认值为’both’。
#参数which的值为 ‘major’、‘minor’、‘both’,分别代表设置主刻度线、副刻度线以及同时设置,默认值为’major’
#参数direction的值为’in’、‘out’、‘inout’,分别代表刻度线显示在绘图区内侧、外侧以及同时显示
#length和width:参数length和width分别用于设置刻度线的长度和宽度
#参数pad用于设置刻度线与标签间的距离
#参数color、labelcolor、colors分别用于设置刻度线的颜色、刻度线标签的颜色以及同时设置刻度线及标签颜色
#参数labelsize用于设置刻度线标签的字体大小
#参数bottom, top, left, right的值为布尔值,分别代表设置绘图区四个边框线上的的刻度线是否显示
#参数labelbottom, labeltop, labelleft, labelright的值为布尔值,分别代表设置绘图区四个边框线上的刻度线标签是否显示
##参考于优快云博文:https://blog.youkuaiyun.com/helunqu2017/article/details/78736554?
#------------------------------------------------------------------------------------------
#ax.tick_params(axis=“y”,direction=“in”)
##plt.rcParams[]
#pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。通过rc参数可以修改默认的属性,
#包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。
#rc参数存储在字典变量中,通过字典的方式进行访问
#-参考博文:https://www.cnblogs.com/pacino12134/p/9776882.html

plt.rcParams['ytick.direction'] = 'inout'#这是plt.xxx与ax.xxx的第二个区别处(no.2)##可以考虑用字典传入所有想要设置的参数

在这里插入图片描述
#3.3)取值范围

x=np.linspace(-7,13,20)
y=2*x+0.6
plt.plot(x,y)
plt.xlim(-10,10)#x轴取值范围[-10,10]。###.xlim方法
plt.ylim(-5,18)#y轴取值范围[-5,18]

#-------------------------------------------------------------------------------
ax = plt.gca()#在没有事先定义ax的情况下从figure上获得ax。

当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示Get Current Figure和Get Current Axes。

在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,

比如说:plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

#####这个很好的说明了plt.xxx与ax.xxx的关系,plt.xxx本质上其实是一个“黑盒子”,这个盒子里面会调用ax.xxx。但是这个盒子有自己的一些操作方法而已。
ax.set_xlim(-15,9)###set_xlim方法
在这里插入图片描述

    #3.4)改变坐标轴位置
x=np.linspace(-7,13,20)
y=2*x+0.6
plt.plot(x,y)
ax = plt.gca()
ax.set_xlabel("I am x Label")
ax.spines["right"].set_color("none")#右边坐标轴不可见
ax.spines["top"].set_color("none")
###ax.tick_params(top=True)
ax.xaxis.set_ticks_position("bottom")# 设置坐标轴上的数字显示的位置,top:显示在顶部  bottom:显示在底部,默认是none
ax.yaxis.set_ticks_position("left")
ax.spines["bottom"].set_position(("data",0))#"data"是x轴数据,移到y=0处
ax.spines["left"].set_position(("data",0))

ax.set_xticks([-5, 5])

ax.set_yticks([-10, 20])

方法3:坐标刻度定位器 axis :ax.x[y]axis.set_major[minor]_locator(locator)

与(plt.xticks , plt.yticks)和 (ax.set_xticks和ax.set_yticks)一样功能

ax.yaxis.set_major_locator(plt.MaxNLocator(nbins=5, steps=[1, 3, 5, 7, 9])) # 面元划分 4段数据

ax.yaxis.set_minor_locator(plt.MultipleLocator(0.5)) # 次刻度间隔

####原文链接:https://blog.youkuaiyun.com/weixin_40040404/article/details/81185564
在这里插入图片描述
#3.5)注释
#1. 指向型注释plt.annotate()
# s:str, 注释信息内容
# xy:(float,float), 箭头点所在的坐标位置
# xytext:(float,float), 注释内容的坐标位置
# weight: str or int, 设置字体线型,其中字符串从小到大可选项有{‘ultralight’, ‘light’, ‘normal’, ‘regular’,
#‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}

            # color: str or tuple, 设置字体颜色 ,单个字符候选项{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'},也可以'black','red'等,
            #tuple时用[0,1]之间的浮点型数据,RGB或者RGBA, 如: (0.1, 0.2, 0.5)、(0.1, 0.2, 0.5, 0.3)等
            # arrowprops:dict,设置指向箭头的参数,字典中key值有①arrowstyle:设置箭头的样式,其value候选项如'->','|-|','-|>',
            #也可以用字符串'simple','fancy'等,详情见顶部的官方项目地址链接。
            
            # ②connectionstyle:设置箭头的形状,为直线或者曲线,候选项有'arc3','arc','angle','angle3',可以防止箭头被曲线内容遮挡
            # ③color:设置箭头颜色,见前面的color参数。
            # bbox:dict,为注释文本添加边框,其key有
                #①boxstyle,其格式类似'round,pad=0.5',其可选项如下:
                #②facecolor(可简写为fc)设置背景颜色
                # ③ edgecolor(可简写为ec)设置边框线条颜色
                # ④lineweight(可简写为lw)设置边框线型粗细
                # ⑤alpha设置透明度,[0,1]之间的小数,0代表完全透明,即类似③颜色设置无效。
           # 链接:https://www.jianshu.com/p/0f56caf4f859       

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值