matplotlib 基本设置

import包:

matplotlib包含有很多的模块,在具体使用的时候根据需要导入依赖的模块。通过将matplotlib包导入重命名为“mpl”,pyplot模块命名为“plt”,其中ticker为坐标轴刻度相关的模块。最基本的导入pyplot包即可。其他的包的使用在后续使用的时候逐一进行说明。

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

全局配置:

#设定坐标洗名称title,图例legend,坐标轴名称,刻度标签的字体大小,画布大小
large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (16, 10),
          'axes.labelsize': med,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
#统一通过plt.rcParams设置
plt.rcParams.update(params)
#设置图的样式
plt.style.use('seaborn-whitegrid')
#设置中文字体
mpl.rcParams['font.family'] = ['Heiti TC']
# matplotlib具体作用是当调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像
%matplotlib inline

创建画布 figure

  • 显示创建画布
    通过plt.figure()显示的创建画布,然后往画布中添加对应的坐标系
# 显示创建一个figure对象
figure = plt.figure()
#为创建的figer添加不同的坐标系,前两个参数2,1表明坐标系为2行1列的排版,最后一个参数表明为那个坐标系
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

输出如下:


  • 隐式创建画布:
    在执行plot()的时候首先会创建画布figure,在画布自动添加一个坐标系axes,然后根据plot()中的数据绘制对应的图像;
x = [1,2,3,4]
y = [2,4,6,8]
plt.plot(x,y)
plt.show()

输出如下:



在隐式创建的时候不需要关心画布和坐标系。隐式创建画布的时候,一个figure对象上,只能有一个axes坐标系,因此只能绘制一个图形。

plot函数使用:

函数

通常plot()函数有如下两种参数的调用形式:
plot([x], y, [fmt], *, data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数:

  • x: x轴数据
  • y: y轴数据
  • fmt:fmt='[marker][line][color]' 表明图表的基本属性: 颜色(color)、点型(marker)、线型(linestyle)
  • data:可索引的数据,类似dataframe对象,可选参数
  • kwargs:指定透明度,线条的宽度,标签等等一系列的参数

具体详可以在官网中查询:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html?highlight=plot#matplotlib.pyplot.plot
除了plot函数外,针对不同的图形有专门的函数进行绘制。具体在后面会逐个进行介绍。

坐标轴范围

同时设定x,y两轴的范围

  • 函数
    plt.axis([xmin, xmax, ymin, ymax])
  • 示例
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(-8, 8, 80)
y = x*3
plt.plot(x, y)
# 设置轴的范围
plt.axis([-5, 5, -20, 20])
plt.show()

输出如下:


分别设置两轴的范围

  • 函数:
    • xlim(*args, **kwargs)
      设置和获取对应坐标轴的范围
left, right = xlim()  # return the current xlim
xlim((left, right))   # set the xlim to left, right
xlim(left, right)     # set the xlim to left, right

等价于坐标系设定set_xlim()
axes.set_xlim(left, right)
- ylim(*args, **kwargs)
设置和获取对应坐标轴的范围

bottom, top = ylim()  # return the current ylim
ylim((bottom, top))   # set the ylim to bottom, top
ylim(bottom, top)     # set the ylim to bottom, top

等价于坐标系设定set_ylim()
axes.set_ylim(bottom, top)

  • 示例:
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(-8, 8, 80)
y = x*3
plt.plot(x, y)
# 设置轴的范围
plt.xlim(-5,5)
plt.ylim(-16,16)
plt.show()

输出如下:


刻度设置:

普通刻度

  • 函数:
    x轴的刻度:plt.xticks(item)
    y轴的刻度:plt.yticks(item)
  • 示例:
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(-8, 8, 80)
y = x*3
plt.plot(x, y)
# 设置轴的范围
plt.xticks(np.arange(-5,5,1))
plt.yticks([-15,-5,3,9,15])
plt.show()

输出如下:


添加文本的刻度

plt.xticks(['数据'], ["标签"]) 设置刻度的基础上,在添加一个列表,来显示刻度

主次刻度设置

需要导入:from matplotlib.ticker import MultipleLocator, FormatStrFormatter

  • 主刻度:(x,y轴相同)
    倍数:ax.xaxis.set_major_locator(MultipleLocator(倍数))
    文本格式:ax.xaxis.set_major_formatter(FormatStrFormatter('%占位数.小数点数f'))
  • 副刻度:(x,y轴相同,将"major"改为"minor"即可)
    倍数:ax.xaxis.set_minor_locator(MultipleLocator(倍数))
    文本格式:ax.xaxis.set_minor_formatter(FormatStrFormatter('%占位数.小数点数f'))
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
'''
生成数据
'''
x = np.linspace(-40, 40)
y = x*3
plt.plot(x, y)
ax = plt.gca()
'''
设置轴的主刻度
'''
ax.xaxis.set_major_locator(MultipleLocator(20))  # 设置20倍数
ax.xaxis.set_major_formatter(FormatStrFormatter('%2.1f'))  # 设置文本格式
ax.yaxis.set_major_locator(MultipleLocator(50))  # 设置50倍数
ax.yaxis.set_major_formatter(FormatStrFormatter('%2.2f'))  # 设置文本格式
'''
设置轴的副刻度
'''
ax.xaxis.set_minor_locator(MultipleLocator(10))  # 设置10倍数
ax.xaxis.set_minor_formatter(FormatStrFormatter('%2.1f'))  # 设置文本格式
ax.yaxis.set_minor_locator(MultipleLocator(25))  # 设置25倍数
ax.yaxis.set_minor_formatter(FormatStrFormatter('%1.0f'))  # 设置文本格式
ax.tick_params(which='minor', width=1, labelsize=10,bottom=True)
ax.tick_params(which='minor', length=2, labelsize=10, labelcolor='0.25')
plt.show()

输出如下:


图例

在plot()的时候增加labe添加文本内容,通过legend()显示出来。
示例:

import matplotlib.pyplot as plt
import numpy as np
'''
生成数据
'''
x = np.linspace(-8, 8, 80)
y = x*3
plt.plot(x, y,label="x*3")
plt.plot(x, y*1.5,label="x*4.5")
'''
loc 设定legend的位置
'''
plt.legend(loc='lower right')
plt.show()

输出如下:


spines设置

  • 属性:
函数 说明 默认值
set_visible(bool) 边框的可见性 True
ax.xaxis.set_ticks_position({"top","left"……}) 刻度的显示位置 外面(不是ax.spines[' '].)
set_position({"top","left"……}) 边框的位置 左下角为交点
set_color(string) 边框的颜色 “black"(当值为None也是隐藏)
set_linewidth(int) 边框的宽度 1
set_linestyle(string) 边框的线性 ”-“
  • 箭头
    导入axisartist
    import mpl_toolkits.axisartist as axisartist

1、隐藏原有的边框坐标系
2、创建新的坐标系,添加箭头
3、创建新的坐标系时ax.new_floating_axis(0, 0)第一个参数:0表示横线,1表示竖线,第二个参数:表示经过那个坐标点。

import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.axisartist as axisartist
# 生成数据
x = np.linspace(-10, 10, 80)
y = x*3
plt.plot(x, y)
ax = plt.gca()
'''
使用ax.spines[]选定边框,使用set_color()将选定的边框的颜色设为 none
'''
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
'''
移动坐标轴,将bottom即x坐标轴移动到y=0的位置
ax.xaixs为x轴,set_ticks_position()用于从上下左右(top/bottom/left/right)四条脊柱中选择一个作为x轴
使用set_position()设置边框位置:y=0的位置。位置的所有属性包括:outward、axes、data
'''
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
'''
将left 即y坐标轴设置到x=0的位置
'''
ax.yaxis.set_ticks_position('left')  # 选定y轴
ax.spines['left'].set_position(('data', 0))
'''
不显示网格
'''
plt.grid( None)
plt.show()

输出如下:


多图的处理

  • subplot()
    plt.subplot(m,n,p)m和n代表在一个图像窗口中显示m行n列个图像,也就是整个figure中有n个图是排成一行的,一共m行,后面的p代表现在选定第p个图像区域,即在第p个区域作图

另外一种多图显示的方式参见 matplotlib可视化之直方图 扩展部分中的双变量直方图

import matplotlib.pyplot as plt
fig=plt.figure()
'''
子图1 第1行第1列
'''
ax1=fig.add_subplot(221) #2*2的图形 在第一个位置
ax1.text(0.5,0.5, 'one',ha='center',va='center',size=20,alpha=.5)
'''
子图2 第1行第2列
'''
ax2=fig.add_subplot(222)
ax2.text(0.5,0.5, 'one',ha='center',va='center',size=20,alpha=.5)
'''
子图3 第2行第1列
'''
ax3=fig.add_subplot(223)
ax3.text(0.5,0.5, 'one',ha='center',va='center',size=20,alpha=.5)
'''
子图4 第2行第2列
'''
ax4=fig.add_subplot(224)
ax4.text(0.5,0.5, 'one',ha='center',va='center',size=20,alpha=.5)
plt.show()

输出如下:


常用的对象:

  • figure 画布
  • axes 坐标系,一个画布上可以有多个坐标系
  • axis 坐标轴,一个坐标系中可以有多个坐标轴,一般都是二维平面坐标系,或者三维立体坐标系
  • title 标题
  • legend 图例
  • grid 背景网格
  • tick 刻度
  • axis label 坐标轴名称
  • tick label 刻度名称
    • major tick label 主刻度标签
    • minor tick label 副刻度标签
  • line 线
  • style 线条样式
  • marker 点标记
  • font 字体相关

你可能感兴趣的:(matplotlib 基本设置)