python 如何绘制子图的同时绘制双坐标轴图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 如何绘制子图的同时绘制双坐标轴图像相关的知识,希望对你有一定的参考价值。

请问,绘制4*4的子图,在每一个子图上再绘制双y坐标轴(如图一是绘制好的单一轴的图),应该怎么画呢 图二为当前绘制子图的代码

用subplots替代subplot,因为在两者都可以画子图的情况下,subplots也可以同时画双y轴。
fig, ax = plt.subplots(2,2) #产生4个子图
在第1个子图里画双y轴:
ax[0].plot(x,y10) #画子图1的第一个y轴值
ax[0].set_ylabel('num0') #标记它的第一个纵坐标为'num0'
ax01 = ax[0].twinx() #产生子图1里的第二个纵坐标
ax01.plot(x,y11, )#画子图1的第二个y轴值
ax01.set_ylabel('num01')#标记子图1里的第二个纵坐标,用'num01'表示

再画第2个子图里的双y轴:
ax[1].plot(x,y20) #画子图2的第一个y轴值
ax[1].set_ylabel('num1') #标记它的第一个纵坐标为'num1'
ax11 = ax[1].twinx() #产生子图1里的第二个纵坐标
ax11.plot(x,y21, )#画子图1的第二个y轴值
ax11.set_ylabel('num11')#标记子图1里的第二个纵坐标,用'num11'表示
同理,第三第四个子图。。。。
参考技术A 可以给个效果图吗

python+matplotlib绘制具有多个子图的图表

目录

1.示例

 2.向示例中添加元素

2.1添加标题

 2.1.1 调整标题位置

 2.2添加图例

2.3 添加文本

2.3.1 单行文本

​编辑 2.3.2 多行文本

 2.4添加坐标轴名称

 2.5坐标轴范围设置

1.示例

本示例来自于matplotlib官网,大家可以参考网站:https://matplotlib.org/

网站中有很多示例代码,可以参考学习。

plt.subplot(321)中的321分别代表3行2列第一个子图。也可以写成plt.subplot(3,2,1)

import numpy as np
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(19680801)

x = np.random.rand(10)
y = np.random.rand(10)
z = np.sqrt(x**2 + y**2)

plt.subplot(321)
plt.scatter(x, y, s=80, c=z, marker=">")

plt.subplot(322)
plt.scatter(x, y, s=80, c=z, marker=(5, 0))

verts = np.array([[-1, -1], [1, -1], [1, 1], [-1, -1]])
plt.subplot(323)
plt.scatter(x, y, s=80, c=z, marker=verts)

plt.subplot(324)
plt.scatter(x, y, s=80, c=z, marker=(5, 1))

plt.subplot(325)
plt.scatter(x, y, s=80, c=z, marker='+')

plt.subplot(326)
plt.scatter(x, y, s=80, c=z, marker=(5, 2))

plt.show()

显示效果如下图:

 2.向示例中添加元素

2.1添加标题

plt.title()函数添加标题,该函数的参数具体如下:

参数:

fontsize设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]

fontweight设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]

fontstyle设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜

verticalalignment设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ , ‘baseline’

horizontalalignment设置垂直对齐方式,可选参数:left,right,center

rotation(旋转角度)可选参数为:vertical,horizontal 也可以为数字

alpha透明度,参数值0至1之间

backgroundcolor标题背景颜色

bbox给标题增加外框 ,常用参数如下:

  1. boxstyle方框外形
  2. facecolor(简写fc)背景颜色
  3. edgecolor(简写ec)边框线条颜色
  4. edgewidth边框线条大小

原文链接:https://blog.csdn.net/TeFuirnever/article/details/88945563

我们在每一个子图的后面添加:plt.title("(a)"-plt.title("(e)",效果如下:

 上图中发现存在标题位置不够被覆盖的问题,我们可以通过constrained_layout=True属性来控制布局。

我们在第一个子图前面添加一行代码,自动控制布局。不管怎么拉动窗口大小,布局都不会重叠。

fig = plt.subplots(3, 2, constrained_layout=True,figsize=(10,11))

plt.subplot(321)
plt.scatter(x, y, s=80, c=z, marker=">")
plt.title("(a)")

将图缩小显示,格式显示效果也较好。 

 2.1.1 调整标题位置

方法一:plt.title("(a)",loc="left"),采用loc属性来设置位置,比如设置为left显示效果如下图:loc supported values are 'left', 'center', 'right'。

 方法二:以上方法只有几种属性,只能将标题设置为左中右按个位置,那么我们如果需要将标题放置到图框中,我们可以采用以下方法:

plt.title("(a)",loc='left',x=0.02,y=0.9)

其中xy的值根据坐标轴的范围来设置,比如我们需要放置到左上角,我们可以设置为0.02,0.9,效果如下,实际使用过程中,根据实际情况调整。

 2.2添加图例

使用plt.legend()函数添加图例。

 我们直接在代码中添加:plt.legend()

plt.subplot(321)
plt.scatter(x, y, s=80, c=z, marker=">")
plt.title("(a)",loc='left',x=0.02,y=0.9)
plt.legend()

这个时候发现右上角有个小方框,没显示出图例:

 这个问题我们需要给scatter函数中添加一个label标签,,这样就显示出图例了。

plt.subplot(321)
plt.scatter(x, y, s=80, c=z, marker=">",label='a')
plt.title("(a)",loc='left',x=0.02,y=0.9)
plt.legend()

 图例的位置我们可以采用loc属性设置,该属性包含:loc: supported values are 'best', 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center'等位置参数。

2.3 添加文本

2.3.1 单行文本

使用函数:plt.text(0.5, 0.5,'a', fontsize=9, horizontalalignment='left')

显示效果如下:根据需求调整位置,调整前面的两个数字,即是位置坐标。 

 2.3.2 多行文本

我们通过添加换行符来添加多行文本,如下:

plt.text(0.5, 0.5,'a\\nb\\n c\\n d\\n', fontsize=9, horizontalalignment='left')

 

 2.4添加坐标轴名称

plt.xlabel('X axis')
plt.ylabel('y axis')

 2.5坐标轴范围设置

plt.xlim(0, 1.2)
plt.ylim(0, 1.2)

效果如下,坐标轴的取值范围发生了变化了,改为0-1.2了:

如果是使用的subplt子图,则使用一下代码:

subplt.set_xlim(0, 1.2)
subplt.set_ylim(0, 1.2)

暂时先写到这里,后面再补充完善。 

以上是关于python 如何绘制子图的同时绘制双坐标轴图像的主要内容,如果未能解决你的问题,请参考以下文章

python+matplotlib绘制具有多个子图的图表

python+matplotlib绘制具有多个子图的图表

如何用MATLAB做双纵坐标图?其中一条是折线图,另一个是柱形图,还有我想做多子图的

Python-Matplotlib可视化——多方面自定义统计图绘制

python-matplotlib函数

如何绘制用于分组子图的括号