文章目录

  • 一、 fig, ax = plt.subplots()的作用
  • 二、参数的含义
  • 三、图上排列多个子图
  • 四、把多个子图一起合并到一个图上
  • 五、画图刻度、图例等字体、字体大小、刻度密度、线条样式设置

一、 fig, ax = plt.subplots()的作用

它是用来创建 总画布/figure“窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)。

  • plt.subplot(111)是plt.subplot(1, 1, 1)另一个写法而已【引用链接】,更完整的写法是plt.subplot(nrows=1, ncols=1, index=1)【官网matplot.pyplot.subplot链接】;
  • fig, ax = plt.subplots()等价于fig, ax = plt.subplots(11)【引用链接】。
  • fig, axes = plt.subplots(23):即表示一次性在figure上创建成2*3的网格,使用plt.subplot()只能一个一个的添加【引用链接】:

二、参数的含义

fig = plt.figure()

matpltlib.pyplot.figure(
num = None,               # 设定figure名称。系统默认按数字升序命名的figure_num(透视表输出窗口)e.g. “figure1”。可自行设定figure名称,名称或是INT,或是str类型;
figsize=None,             # 设定figure尺寸。系统默认命令是rcParams["figure.fig.size"] = [6.4, 4.8],即figure长宽为6.4 * 4.8;
dpi=None,                 # 设定figure像素密度。系统默命令是rcParams["sigure.dpi"] = 100;
facecolor=None,           # 设定figure背景色。系统默认命令是rcParams["figure.facecolor"] = 'w',即白色white;
edgecolor=None, frameon=True,    # 设定要不要绘制轮廓&轮廓颜色。系统默认绘制轮廓,轮廓染色rcParams["figure.edgecolor"]='w',即白色white;
FigureClass=<class 'matplotlib.figure.Figure'>,   # 设定使不使用一个figure模板。系统默认不使用;
clear=False,                     # 设定当同名figure存在时,是否替换它。系统默认False,即不替换。
**kwargs)

ax = plt.subplot() 【官网链接】

三、图上排列多个子图

比如说我们想画个2*2的子图,每个子图对应一个表。

  1. 创建多维窗口:
fig, axes = plt.subplots(2, 2)  # 此处是一个2*2的图
  1. 设定各个透视子图在窗口的位置:
data.plot.bar(ax=axes[1,1], color='b', alpha=0.5)  # ax=[1,1] 即位置是第2行、第二列。(python从0开始计数,所以“1”代表第2的)data.plot.barh(ax=axes[0,1], color='k', alpha=0.5) # alpha:设定图表的透明度;
  1. 添加子透视图代码。
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 2)data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))data.plot.bar(ax=axes[1,1], color='b', alpha = 0.5)
data.plot.barh(ax=axes[0,1], color='k', alpha=0.5)plt.show()

四、把多个子图一起合并到一个图上

最主要的一点是让多个图线共用一个x坐标轴。

  • 语句规定N个折线图共用一个x坐标(注意:y轴分主副轴):
import numpy as np
import matplotlib.pyplot as pltfig, ax1 = plt.subplots(1, 1)             # 做1*1个子图,等价于 " fig, ax1 = plt.subplot() ",等价于 " fig, ax1 = plt.subplots() "ax2 = ax1.twinx()                         # 让2个子图的x轴一样,同时创建副坐标轴。# 作y=sin(x)函数
x1 = np.linspace(0, 4 * np.pi, 100)
y1 = np.sin(x1)
ax1.plot(x1, y1)#  作y = cos(x)函数
x2 = np.linspace(0, 4 * np.pi, 100)       # 表示在区间[0, 4π]之间取100个点(作为横坐标,“线段是有无数多个点组成的”)。
y2 = np.cos(x2)
ax2.plot(x2, y2)plt.savefig('sin_cos_2.png')               # 将窗口另存为png格式图片


如果需要主副y轴都一样:就把ax1和ax2它俩用ax一个取代了。

  • 自定义图表样式:比如旋转x轴标签、上边和右边的坐标轴不显示、曲线和y轴对齐等
import matplotlib.pyplot as pltplt.rcParams['font.family'] = ['SimHei']              # 解决不能输出中文的问题。不区分大小写,即SimHei’效果等价于‘simhei’,中括号可以不要
plt.rcParams['figure.autolayout'] = True              # 解决不能完整显示的问题(比如因为饼图太大,显示窗口太小)fig, ax = plt.subplots(1, 1, figsize=(12, 9))         # 进一步设定fig的size为12*9ax.spines['top'].set_visible(False)                   # 不显示图表框的上边框
ax.spines['right'].set_visible(False)                 # 不显示图表框的右边框ax.set_xlim(0, 10)                                    # 有时候x轴不会从0显示,使得折线图和y轴有间隙
ax.set_ylim(0, 1.3e8)                                 # 和x轴同理plt.xticks(range(0, 10), fontsize=12, rotation=80)    # 针对x轴的标签,指定我们想要设定的范围是(0, 10), 字体大小是12, 逆时针旋转80°plt.tick_params(bottom='off', left='off', labelbottom='on', lableleft='on')  # 使x轴和y轴不带比例标识点, labelbottom设定下边、即x轴的标签是否显示。< blabla... >plt.suptitle('自定义图表', fontsize=400, ha='center')  # 即标题在x轴和y轴形成的方框内部,如下图(详细用法见下注释)。如果需要标题在这上方,使用 plt.title(blabla)
plt.show()
"""
对于multiple subplots一般情况下,
1)设置 plt.xticks(range(0, 10))只会对最后一个ax起作用。要想作用于所有subplots,要这样:
for ax in axes:ax.set_xticks(range(0, 10))
2)标题:显示中文方面-在各个子图上要这样:
plt.title('某个子图的中文title', fontproperties='simhei'),
因为plt.rcParams['font.family'] = 'simhei' 只对整体的标题是有效的。
整体的标题要这样设置:
plt.suptitle(‘全体子图的中文title’)
3)xticks的旋转方面。例如上面的主副坐标轴的共x轴,要这样:
ax1.set_xticklabels(['str format labels'], rotation=80)
而这样的设置无效:plt.xticks(x, rotation=80)。
"""

matplotlib.pyplot.suptitle(
t,                          # text缩写。即标题文字。
fontsize | size,            # 设定字体大小。
x,                          # 设定标题相对于x轴的位置,默认是'0.5'。
y,                          # 设定标题相对于y轴的位置,默认是'0.98'。
ha | horizontalalignment,   # 和参数x一起使用,设定标题水平方位,默认是‘center’。共3个可选值{'center', 'left', right'}。
va | verticalalignment,     # 和参数y一起使用,设定标题垂直方位, 默认是'top'。共4个可选值{'top', 'center', 'bottom', 'baseline'}。
fontweight | weight         # 设定字体权重。
)

五、画图刻度、图例等字体、字体大小、刻度密度、线条样式设置

  • 输出图片大小:
figsize = 11,9
figure, ax = plt.subplots(figsize=figsize)
  • 画简单的折线图,同时标注线的形状、名称、粗细:
A,=plt.plot(x1,y1,'-r',label='A',linewidth=5.0,ms=10)

其中线条样式以及颜色设置可参考:添加链接描述。线条粗细使用linewidth设置,对应线条上的marker大小设置为ms参数。因为有时候粗线条,所以对应marker大小也需要增加。如果想要标记marker为空心,可以在后面加上 markerfacecolor=‘none’

  • 设置图例以及对应属性:
legend = plt.legend(handles=[A,B],prop=font1)

图例的字体格式在prop中进行设置,赋值font1可以是一个字典,包含各个属性及其对应值,属性包括family(字体)、size(字体大小)等常用属性,更详细的解释可参考matplotlib手册中关于legend prop的解释。

一种比较简单的设置为:

font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 23,
}
  • 坐标轴刻度密度/间隔设置: 括号中的数字为对应的刻度间隔值,y轴对应类似。
ax.xaxis.set_major_locator(MultipleLocator(10))
  • 坐标轴刻度值属性设置:
plt.tick_params(labelsize=23)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]

其中tick_params中可设置一系列属性,包括刻度值字体大小、方向、大小,颜色等一系列属性,具体可参见手册中关于tick_params的解释。

比较特殊的是,其中并没有对刻度值的字体进行设置的属性,所以我们需要使用下面两行进行设置,在最初使用plt.subplots中有得到一个返回值ax,我们使用ax.get_xticklabels()以及ax.get_yticklabels()来得到所有的刻度值,并使用set_fontname函数来设置属性。

  • 坐标轴名称以及对应字体属性设置:
plt.xlabel('round',font2)
plt.ylabel('value',font2)

这种比较简单,第一个参数为坐标轴名称,第二个参数也是一个字典参数,和上文提及的dict font1格式相同。

有时候,因为调整了坐标刻度的字体大小,影响了坐标轴label的显示。所以我们需要通过调整坐标轴边距来显示label

plt.subplots_adjust(left = 0.15,bottom=0.128)
#--coding:utf-8--
import  matplotlib.pyplot as plt#数据设置
x1 =[0,5000,10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 55000];
y1=[0, 223, 488, 673, 870, 1027, 1193, 1407, 1609, 1791, 2113, 2388];x2 =[0,5000,10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 55000];
y2=[0, 214, 445, 627, 800, 956, 1090, 1281, 1489, 1625, 1896, 2151];#设置输出的图片大小
figsize = 11,9
figure, ax = plt.subplots(figsize=figsize)#在同一幅图片上画两条折线
A,=plt.plot(x1,y1,'-r',label='A',linewidth=5.0)
B,=plt.plot(x2,y2,'b-.',label='B',linewidth=5.0)#设置图例并且设置图例的字体及大小
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 23,
}
legend = plt.legend(handles=[A,B],prop=font1)#设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=23)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]#设置横纵坐标的名称以及对应字体格式
font2 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 30,
}
plt.xlabel('round',font2)
plt.ylabel('value',font2)#将文件保存至文件中并且画出图
plt.savefig('figure.eps')
plt.show()

【python matplotlib 】fig, ax = plt.subplots()画多表图相关推荐

  1. python 可视化:fig, ax = plt.subplots()画多表图的3中常见样例 自定义图表格式

    目录 一.fig, ax = plt.subplots()的作用? 二.参数的含义? 三.怎么在一个图上排列多个子图? 四.怎么把多个子图一起合并到一个图上? <Python for Data ...

  2. plt画网格图_python 可视化:fig, ax = plt.subplots()画多表图的3中常见样例 自定义图表格式...

    一.fig, ax = plt.subplots()的作用? 它是用来创建 总画布/figure"窗口"的,有figure就可以在上边(或其中一个子网格/subplot上)作图了, ...

  3. python subplots_python fig,ax = plt.subplots()

    fig,ax = plt.subplots() 使用该函数确定图的位置,掉用时要XXX=ax.(ax是位置) 等价于:fig = plt.figure() ax = fig.add_subplot(1 ...

  4. fig,ax = plt.subplots()

    它是用来创建 总画布/figure"窗口"的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写). fig, ax = plt ...

  5. python使用使用对数坐标系 fig, ax = plt.subplots() ax.set_xscale(“log“) ax.set_yscale(“log“)

    python使用使用对数坐标系 newX = [] newY = [] for i in range(len(x)):if y[i] != 0 :newX.append(x[i])newY.appen ...

  6. python中fig_Matplotlib画图中fig,ax,plt的区别和联系

    用python两年多了,然而至今画图时依然会对群魔乱舞的Matplotlib对象感到困惑,尤其是看起来作用都类似的fig,ax和plt以及各种各样的subplot. 我们先来看以下三个示例 # C1 ...

  7. python matplotlib fig = plt.figure() fig.add_subplot()

    一.matplotlib.pyplot.figure() Create a new figure, or activate an existing figure. matplotlib官网 功能: 创 ...

  8. 字符动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图

    1.数据可视化动图,是数据可视化的高级显示,最近很流行. 2.比如下面将告诉你如何制作一个如下的数据可视化动图. 3.例: 3.1 准备一组数据,虚拟的csv资料,对应关系如下 4个项目:namegr ...

  9. python制作数据增长动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图...

    #第1步:导出模块,固定 importpandas as pdimportmatplotlib.pyplot as pltimportmatplotlib.ticker as tickerimport ...

最新文章

  1. UICollectionView的基本使用(1)
  2. Nginx 正向代理与反向代理区别
  3. L1正则化与数据分布的关系
  4. 为iptables开放新的网络端口
  5. 2020腾讯二次元营销通案
  6. 回填用土好还是砂石料好_养猪用颗粒料好还是自配料好?其实各有优劣,养猪人要会选择...
  7. 布线问题_分支限界法
  8. PCB layout的基本原则
  9. MDK(keil5)的下载及安装教程
  10. Drozer的安装和使用教程(入门)
  11. echarts的用法
  12. Php中什么时候用单引号,PHP中单引号和双引号的用法举例
  13. 高动态范围(High-Dynamic Range,简称HDR)
  14. 科大奥锐密立根油滴实验数据_密立根油滴实验原始数据记录表
  15. “永远肩负守卫物联网安全的责任和使命”——Ayla CTO发声美网瘫痪事件
  16. c语言比较函数memcmp,c语言函数memcmp()如何比较内存前n个字节实例源码介绍
  17. 系统出错,发生系统错误1067
  18. RPC服务器不可用解决方法汇集
  19. 搭建 centos7 YUM 源
  20. 对ElasticSearch主副分片的理解

热门文章

  1. failed to run cuBLAS routine cublasSgemm_v2: CUBLAS_STATUS_EXECUTION_FAILED Blas GEMM launch failed
  2. 文心一言云服务下周上线/ 亚马逊再裁9000人/ 首款GPT-4医用软件问世…今日更多新鲜事在此...
  3. 《RSA与大数运算》
  4. Linux用户管理之sudo权限(visudo)
  5. 数据结构——循环链表
  6. vscode 使用技巧、快捷键
  7. 数据库设计,一二范式理解
  8. 现实生活中的奢侈品如何走进数字时尚?
  9. Windows怎么开机自动登录?怎么取消自动登录
  10. 山东大学(威海)CSDN高校俱乐部高同常主席发来的新年礼物感恩贴