from mpl_toolkits.axes_grid1 import host_subplot
这种主轴+寄生轴实现多y轴的方法,因为 matplotlib 里对这个方法的支持并不多,甚至连修改线宽难度也不小(可能是我不会……欢迎交流)。我上面提到的方法有很多的参数接口,既然这样,那就发挥这种方法的优势,来做一点点美化吧!
Created on Mon Aug 22 20:01:38 2022
@author: Lenovo
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from matplotlib.pylab import mpl
config = {
"font.family":'Times New Roman',
"font.size": 16,
"mathtext.fontset":'stix',
"font.serif": ['Times New Roman'],
rcParams.update(config)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus']=False
pressure = np.array([40, 50, 100, 140, 160, 180, 200, 240])
Tc = np.array([51.870, 54.062, 48.419, 42.902, 42.290, 41.336, 41.309, 42.725])
Lambda = np.array([1.849, 1.494, 1.054, 0.935, 0.914, 0.896, 0.893, 0.895])
Omiga_log = np.array([410.806, 522.407, 741.113, 811.674, 836.477, 850.304, 855.685, 880.548])
a = 0.45
fig, ax = plt.subplots(figsize=(13*a,13*a))
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0.3)
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.direction'] = 'in'
bwith = 2
ax.spines['bottom'].set_linewidth(bwith)
ax.spines['left'].set_linewidth(bwith)
ax.spines['top'].set_linewidth(bwith)
ax.spines['right'].set_linewidth(bwith)
ax.axhline(y=np.average(Tc[3:]), color='gray', ls='-', )
ax.plot(pressure, Tc, 'k-o')
ax.set_ylim(ymin=0, ymax=59)
ax.set_xlabel('$\mathrm{pressure \; (GPa)}$', fontsize=18)
ax.set_ylabel('$\mathrm{T_c \; (K)}$', fontsize=18)
ax.tick_params(length=6, width=2)
ax.spines['right'].set_visible(False)
lambda_color = 'blue'
labmda_ax = ax.twinx()
labmda_ax.plot(pressure, Lambda, 's--', color=lambda_color)
labmda_ax.set_ylim(ymin=0.001, )
labmda_ax.set_xlabel('$\mathrm{pressure \; (GPa)}$', fontsize=18)
labmda_ax.tick_params(length=6, width=2, color=lambda_color, labelcolor=lambda_color)
labmda_ax.set_ylabel('$\lambda$', fontsize=18, color=lambda_color)
labmda_ax.spines['right'].set(color=lambda_color, linewidth=2.0, linestyle=':')
omglog_color = 'red'
omglog_ax = ax.twinx()
omglog_ax.spines['right'].set_position(('data', 300))
omglog_ax.set_ylim(0, 900)
omglog_ax.plot(pressure, Omiga_log, 'o-.', color=omglog_color)
omglog_ax.set_ylabel('$\omega_{log}$', fontsize=18, color=omglog_color)
omglog_ax.tick_params(length=6, width=2, color=omglog_color, labelcolor=omglog_color)
omglog_ax.spines['right'].set(color=omglog_color, linewidth=2.0, linestyle='-.')
在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。下面示例绘制了一个具有两个 y 轴的图形,一个显示指数函数 exp(x),另一个显示对数函数 log(x)。
Matplotlib绘制出的图形中会存在一些问题,例如:如何绘制双Y轴坐标系?如何去掉图形默认的边框?以及如何移动坐标到指定位置?下面我们就来看看如何解决
1️⃣twinx()函数
双y轴绘制的关键函数:twinx()。
twinx()函数表示共享x轴,共享表示的就是x轴使用同一刻度线。
使用这个Axes坐标轴实例去调用twinx()函数,从而实现两个Y轴共享一个X轴的效果。
使用add_subplot添加了Axes坐标轴实例。
%matplotlib inline
import pandas as
Matplotlib可以创建出版质量的图形,制作交互式的图形,自定义视觉风格和布局,导出到多种文件格式,嵌入在JupyterLab和图形用户界面中。Matplotlib提供了多种图形,包括基本的柱状图、折线图、散点图、箱线图、散点图、饼图等,还提供了极坐标图、3D图形等高级的可视化图形(如果不想看官方文档,可以查看。好了,今天的踩坑日记就到这里了,对于图的其它修改细节,大家可以自己尝试一下,多试试总能发现不同的坑。,并且也没有出现报错信息,说明两个图例都显示出来的,很有可能就是。
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
简 介: 本文给出了利用Matplotlib中的 twinx() 完成同一个图表中绘制具有两个 Y-轴的曲线。绘制每一个曲线的方法与普通的Plot没有什么两样。
关键词: matplotlib,双Y轴
#mermaid-svg-SsRJ7ZfWKpMLrQEB .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-sv..
import pandas as pd
from matplotlib.lines import Line2D
import matplotlib.patches as patches
import pandas as pd
import seaborn as sns
在某些情况下,我们需要在同一个图形中绘制具有不同量级的数据,并且希望它们分别对应于两个不同的Y轴。假设我们有两个数据集,分别是 “dataset1” 和 “dataset2”,它们具有不同的量级。通过以上步骤,我们成功地实现了使用 Matplotlib 绘制双Y轴图形的效果。希望本文能够帮助你理解如何使用 Matplotlib 绘制双Y轴图形,并为你的数据可视化工作提供参考。运行上述代码,将会得到一个带有双Y轴的图形,其中左Y轴对应于 “dataset1”,右Y轴对应于 “dataset2”。
在python中作图是一个基本的数据可视化的操作,需要初学者要熟练掌握。而在作图中需要经常用到的库有numpy、matplotlib,其中对于图的操作经常会涉及到图形的横纵标签,标题,横纵坐标的表示等。其中调用matplotlib中的plot进行作图(这与matlab类似),xlabel、ylabel用于设置图形的横纵坐标签,title用于设置图形的标题,legend用于设置显示图形标签。这里展示用python将y=sinx与y=cosx进行作图,并且放在同一个窗口中。