Python实现双X轴双Y轴绘图的示例详解

诈尸人口回归。这一年忙着灌水忙到头都掉了,最近在女朋友的提醒下终于想起来博客的账号密码,正好今天灌水的时候需要画一个双X轴双Y轴的图,研究了两小时终于用Py实现了。找资料的过程中没有发现有系统的文章,反正代码都整理出来了,我决定顺势水一篇。

目前找到的plt实现双X轴双Y轴绘图方式有两种:

使用fig.add_subplot方式将两对坐标系叠加在一个fig上实现双X轴双Y轴效果。所有调整均可完美实现,推荐该方式

通过axes.twinx().twiny()方式实现双X轴双Y轴图形绘制。问题在于对于第二个Y轴的各种设置无效,label可以通过手动添加的方式创建并指定颜色,而tick颜色则无法修改。可能需要等待官方修复,或者尝试先使用 ax1=axes.twinx()方式,从ax1中获取第二个Y轴,然后再使用ax2.twiny()创建第二个X轴。

fig.add_subplot 方式实现双X轴双Y轴绘图

"""
使用plt,通过fig.add_subplot方式将两对坐标系叠加在一个fig上实现双X轴双Y轴效果。
所有调整均可完美实现,推荐该方式
"""
import matplotlib.pyplot as plt
import numpy as np

"""生成数据并设置绘图参数"""
x = np.arange(1, 12, 4)
y = np.arange(1, 4, 1)
x2=x*10
y2=y**2
# 设置两种绘图颜色
c1='r'
c2='b'
# 设置字体大小
fontsize=12
# 设置画布大小
width,height=16,14 # 单位为cm;因为保存图片时使用 bbox_inches = 'tight' 可能使图片尺寸略微放大,所以此处宽度设置得略小
# 设置刻度线在坐标轴内
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
"""绘图"""
lns=[] # 用于存储绘图句柄以合并图例的list
# 创建画布并设置大小
fig=plt.figure()
fig.set_size_inches(width/2.54, height/2.54) # 因为画布输入大小为厘米,此处需转换为英寸,所以除以2.54
# 通过 add_subplot 方式创建两个坐标轴,相当于在同一个子图上叠加了两对坐标系
ax=fig.add_subplot(111, label="1")
ax2=fig.add_subplot(111, label="2", frame_on=False)
# 绘制图1并将绘图句柄返回,以便添加合并图例
lns1=ax.plot(x,y,color=c1,label=c1)
lns=lns1
lns2=ax2.plot(x2,y2, color=c2,label=c2)
lns+=lns2
"""图形美化"""
# 调整第二对坐标轴的label和tick位置,以实现双X轴双Y轴效果
ax2.xaxis.tick_top()
ax2.yaxis.tick_right()
ax2.xaxis.set_label_position('top')
ax2.yaxis.set_label_position('right')
# 设置坐标轴标注
ax.set_xlabel("X1", color=c1,fontsize=fontsize)
ax.set_ylabel("Y1", color=c1,fontsize=fontsize)
ax2.set_xlabel('X2', color=c2,fontsize=fontsize)
ax2.set_ylabel('Y2', color=c2,fontsize=fontsize)
# 设置图表标题
fig.suptitle("Title",fontsize=fontsize+2)
# 设置坐标轴刻度颜色
ax.tick_params(axis='x', colors=c1)
ax.tick_params(axis='y', colors=c1)
ax2.tick_params(axis='x', colors=c2)
ax2.tick_params(axis='y', colors=c2)
# 设置坐标轴线颜色
ax.spines["left"].set_color("r") # 修改左侧颜色
ax.spines["right"].set_color("b") # 修改右侧颜色
ax.spines["top"].set_color("b") # 修改上边颜色
ax.spines["bottom"].set_color("r") # 修改下边颜色
# 添加图例
labs = [l.get_label() for l in lns]
ax.legend(lns, labs, loc=0,fontsize=fontsize)
plt.tight_layout()
plt.show()

使用 axes.twinx().twiny() 方式实现双X轴双Y轴绘图

"""
使用plt,通过 axes.twinx().twiny() 方式实现双X轴双Y轴图形绘制。
问题在于对于第二个Y轴的各种设置无效,label可以通过手动添加的方式创建并指定颜色,而tick颜色则无法修改
"""
import matplotlib.pyplot as plt
import numpy as np

"""生成数据并设置绘图参数"""
x = np.arange(1, 12, 4)
y = np.arange(1, 4, 1)
x2=x*10
y2=y**2
# 设置两种绘图颜色
c1='r'
c2='b'
# 设置字体大小
fontsize=12
# 设置刻度线在坐标轴内
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
"""绘图"""
lns=[] # 用于存储绘图句柄以合并图例的list
# 创建画布
fig,axes=plt.subplots()
fig.set_size_inches(10, 8)
# 绘制图1并将绘图句柄返回,以便添加合并图例
lns1=axes.plot(x,y,color=c1,label=c1)
lns=lns1
# 创建双x轴双y轴
twin_axes=axes.twinx().twiny() # 使用画布的初始坐标轴对象创建第二对坐标轴,类似于在双x轴的基础上叠加双y轴
# 绘制图2并将绘图句柄返回,以便添加合并图例
lns2=twin_axes.plot(x2,y2,color=c2,label=c2)
lns+=lns2
"""图形美化"""
# 设置坐标轴标注
axes.set_xlabel("X1",color=c1, fontsize=fontsize)
axes.set_ylabel("Y1",color=c1, fontsize=fontsize)
twin_axes.set_xlabel("X2",color=c2, fontsize=fontsize)
twin_axes.set_ylabel("Y2",color=c2, fontsize=fontsize) # 第二个y轴设置标注无效
# 设置图表标题
fig.suptitle("Title",fontsize=fontsize+2)
# 设置第二个y轴的label;由于set_ylabel无效,因此只能通过该种方式手动添加
loc_text_x=np.min(plt.xlim())+np.ptp(plt.xlim())*1.03
loc_text_y=np.min(plt.ylim())+np.ptp(plt.ylim())*0.5
str_text='Y2'
twin_axes.text(loc_text_x, loc_text_y, str_text,rotation=90,color=c2,fontsize=fontsize)
# 设置坐标轴刻度颜色
axes.tick_params('x', colors=c1)
axes.tick_params('y', colors=c1)
twin_axes.tick_params('x', colors=c2)
twin_axes.tick_params('y', colors=c2)
# 设置坐标轴线颜色
twin_axes.spines["left"].set_color("r") # 修改左侧颜色
twin_axes.spines["right"].set_color("b") # 修改右侧颜色;同第二个y轴的label设置一样,该设置也不起作用
twin_axes.spines["top"].set_color("b") # 修改上边颜色
twin_axes.spines["bottom"].set_color("r") # 修改下边颜色
# 添加图例
# lns = lns1+lns2
labs = [l.get_label() for l in lns]
axes.legend(lns, labs, loc=0,fontsize=fontsize)
plt.tight_layout()
plt.show()

到此这篇关于Python实现双X轴双Y轴绘图的示例详解的文章就介绍到这了,更多相关Python双轴绘图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python绘制双Y轴折线图以及单Y轴双变量柱状图的实例

    近来实验室的师姐要发论文,由于论文交稿时间临近,有一些杂活儿需要处理,作为实验室资历最浅的一批,我这个实习生也就责无旁贷地帮忙当个下手.今天师姐派了一个小活,具体要求是: 给一些训练模型的迭代次数,训练精度的数据,让我做成图表形式展示出来,一方面帮助检查模型训练时的不足,另一方面来看样本数目和预测精度之间的联系,数据具体格式如下: Iteration 1500 label train test right acc 12 143 24 24 1.0 160 92 16 15 0.9375 100

  • Python实现双轴组合图表柱状图和折线图的具体流程

    Python绘制双轴组合的关键在plt库的twinx()函数,具体流程: 1.先建立坐标系,然后绘制主坐标轴上的图表: 2.再调用plt.twinx()方法: 3.最后绘制次坐标轴图表. import cx_Oracle import xlrd import xlwt import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import FuncFormatter plt.rcParams['font.s

  • 基于python的matplotlib制作双Y轴图

    一.函数介绍 函数:twin()函数 含义:表示共享x轴,共享表示的就是x轴使用同一刻度 二.实际应用 2.1 实验数据展示 数据表的名称:600001SH.xlsx 2.2 代码实现: 文章里使用到了Subplot()函数 # 导入相关数据包 import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体 plt.rcParams['axes.unic

  • python matplotlib实现双Y轴的实例

    如下所示: import matplotlib.pyplot as plt import numpy as np x = np.arange(0., np.e, 0.01) y1 = np.exp(-x) y2 = np.log(x) fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(x, y1,'r',label="right"); ax1.legend(loc=1) ax1.set_ylabel('Y values for

  • Python+Matplotlib绘制双y轴图像的示例代码

    目录 双Y轴图简介 实现思路 实现代码 样式一 样式二 双Y轴图简介 双Y轴图顾名思义就是在一个图里有两个Y轴.这种图形主要用来展示两个因变量和一个自变量的关系并且两个因变量的数值单位还不同.如我们想要展示不同月份公司销业绩以及成本的变化情况这时就可以用双Y轴图来展示.(因变量销量和成本具有不同的单位). 实现思路 绘制双y轴的思想,也是用到了matplotlib面向对象绘图的思想.在不指定位置的情况下,在一个画布上创建出两个坐标系,其中第一个坐标系正常创建,第二个坐标系则使用专有的twinx(

  • python画双y轴图像的示例代码

    很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像. 一个例子: import seaborn as sns import matplotlib.pyplot as plt # ax1 for KDE, ax2 for CDF f, ax1 = plt.subplots() ax1.grid(True) # ax1.set_ylim(0, 1) ax1.set_ylabel('

  • Python matplotlib 绘制双Y轴曲线图的示例代码

    Matplotlib简介 Matplotlib是非常强大的python画图工具 Matplotlib可以画图线图.散点图.等高线图.条形图.柱形图.3D图形.图形动画等. Matplotlib安装 pip3 install matplotlib#python3 双X轴的 可以理解为共享y轴 ax1=ax.twiny() ax1=plt.twiny() 双Y轴的 可以理解为共享x轴 ax1=ax.twinx() ax1=plt.twinx() 自动生成一个例子 x = np.arange(0.,

  • Python实现双X轴双Y轴绘图的示例详解

    诈尸人口回归.这一年忙着灌水忙到头都掉了,最近在女朋友的提醒下终于想起来博客的账号密码,正好今天灌水的时候需要画一个双X轴双Y轴的图,研究了两小时终于用Py实现了.找资料的过程中没有发现有系统的文章,反正代码都整理出来了,我决定顺势水一篇. 目前找到的plt实现双X轴双Y轴绘图方式有两种: 使用fig.add_subplot方式将两对坐标系叠加在一个fig上实现双X轴双Y轴效果.所有调整均可完美实现,推荐该方式 通过axes.twinx().twiny()方式实现双X轴双Y轴图形绘制.问题在于对

  • Python深度学习实战PyQt5窗口切换的堆叠布局示例详解

    目录 1. 堆叠布局简介 1. 1什么是堆叠布局(Stacked Layout) 1.2 堆叠布局的实现方法 2. 创建多窗口切换的堆叠布局 3. 堆叠布局的主程序设计 3.1 QStackedWidget 类 3.2 建立信号/槽连接 3.3 页面控制程序 3.4 堆叠布局中的控件操作 软件项目中经常需要多种不同的图形界面,以适应不同的任务场景.选项卡控件(QTackedWidget)通过标签选择打开对应的对话框页面,不需要另外编程.堆叠窗口控件(QStackedWidget)在主程序中通过编

  • Python教程通过公共键对不同字典进行排序示例详解

    利用 operator 模块中的 itemgetter 函数对这类结构进行排序. rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 100

  • 通过Python的filestools库给图片添加全图水印的示例详解

    目录 前言 一.filestools库简介 二.安装filestools 三.查看filestools版本 四.图片添加全图水印 1.引入库 2.添加水印 五.参数调整对比 1.水印颜色 1.1通过名称设置颜色 1.2通过RGB值设置颜色 1.3通过十六进制设置颜色 2.水印字体的大小 3.水印的透明度 4.水印直接的间隔 5.水印旋转角度 总结 前言 大家好,我是空空star,本篇给大家分享一下通过Python的filestools库给图片添加全图水印. 一.filestools库简介 fil

  • Python深度学习实战PyQt5布局管理项目示例详解

    目录 1. 从绝对定位到布局管理 1.1 什么是布局管理 1.2 Qt 中的布局管理方法 2. 水平布局(Horizontal Layout) 3. 垂直布局(Vertical Layout) 4. 栅格布局(Grid Layout) 5. 表格布局(Form Layout) 6. 嵌套布局 7. 容器布局 布局管理就是管理图形窗口中各个部件的位置和排列.图形窗口中的大量部件也需要通过布局管理,对部件进行整理分组.排列定位,才能使界面整齐有序.美观大方. 1. 从绝对定位到布局管理 1.1 什么

  • jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】

    本文实例讲述了jQuery插件echarts实现的去掉X轴.Y轴和网格线效果.分享给大家供大家参考,具体如下: 1.问题背景: 如何在echarts中,去掉X轴.Y轴和网格线,只留数据图形 2.实现源码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>echarts-去掉X轴.Y轴和网格线</title> <script type=&q

  • echarts实现获取datazoom的起始值(包括x轴和y轴)

    我就废话不多说了,大家还是直接看代码吧~ let option = {} //你的echarts图表的配置,这里我就不贴我的了 myChart.setOption(option); //开始 let startValue = myChart.getModel().option.dataZoom[0].startValue; let endValue = myChart.getModel().option.dataZoom[0].endValue; let start = myChart.getM

  • 对python打乱数据集中X,y标签对的方法详解

    今天踩过的两个小坑: 一.用random的shuffle打乱数据集中的数据-标签对 index=[i for i in range(len(X_batch))] # print(type(index)) index=random.shuffle(index) 结果shuffle完以后index变成None了,看了下api,这样说明的: 这个函数如果返回值,就返回None,所以用index=balabala就把index的内容改变了.去掉index=random.shuffle(index)等号前

  • python绘图模块matplotlib示例详解

    前言 Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的,所以最近学习了一下Matplotlib模块,将该模块的常用的绘图手段和大家分享一下,提高大家在工作中的效率: 在示例中,我们主要用到Matplotlib和Numpy这两个模块来为大家演示Python强大的绘图功能,相信大家通过我下面的10个示例,基本上可以满足大家日常工作的需求,再次强调一下

  • 关于Python可视化Dash工具之plotly基本图形示例详解

    Plotly Express是对 Plotly.py 的高级封装,内置了大量实用.现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表,可满足90%以上的应用场景. 本文借助Plotly Express提供的几个样例库进行散点图.折线图.饼图.柱状图.气泡图.桑基图.玫瑰环图.堆积图.二维面积图.甘特图等基本图形的实现. 代码示例 import plotly.express as px df = px.data.iris() #Index(['sepal_length', '

随机推荐