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 字体相关
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355