简 介: 本文给出了利用Matplotlib中的 twinx() 完成同一个图表中绘制具有两个 Y-轴的曲线。绘制每一个曲线的方法与普通的Plot没有什么两样。

关键词matplotlib双Y轴

#mermaid-svg-69bNuolHk2vVDqq2 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-69bNuolHk2vVDqq2 .label text{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .node rect,#mermaid-svg-69bNuolHk2vVDqq2 .node circle,#mermaid-svg-69bNuolHk2vVDqq2 .node ellipse,#mermaid-svg-69bNuolHk2vVDqq2 .node polygon,#mermaid-svg-69bNuolHk2vVDqq2 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-69bNuolHk2vVDqq2 .node .label{text-align:center;fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .node.clickable{cursor:pointer}#mermaid-svg-69bNuolHk2vVDqq2 .arrowheadPath{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-69bNuolHk2vVDqq2 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-69bNuolHk2vVDqq2 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-69bNuolHk2vVDqq2 .edgeLabel rect{opacity:0.9}#mermaid-svg-69bNuolHk2vVDqq2 .edgeLabel span{color:#333}#mermaid-svg-69bNuolHk2vVDqq2 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-69bNuolHk2vVDqq2 .cluster text{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-69bNuolHk2vVDqq2 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-69bNuolHk2vVDqq2 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-69bNuolHk2vVDqq2 .actor-line{stroke:grey}#mermaid-svg-69bNuolHk2vVDqq2 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-69bNuolHk2vVDqq2 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-69bNuolHk2vVDqq2 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-69bNuolHk2vVDqq2 .sequenceNumber{fill:#fff}#mermaid-svg-69bNuolHk2vVDqq2 #sequencenumber{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-69bNuolHk2vVDqq2 .messageText{fill:#333;stroke:#333}#mermaid-svg-69bNuolHk2vVDqq2 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-69bNuolHk2vVDqq2 .labelText,#mermaid-svg-69bNuolHk2vVDqq2 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-69bNuolHk2vVDqq2 .loopText,#mermaid-svg-69bNuolHk2vVDqq2 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-69bNuolHk2vVDqq2 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-69bNuolHk2vVDqq2 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-69bNuolHk2vVDqq2 .noteText,#mermaid-svg-69bNuolHk2vVDqq2 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-69bNuolHk2vVDqq2 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-69bNuolHk2vVDqq2 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-69bNuolHk2vVDqq2 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-69bNuolHk2vVDqq2 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .section{stroke:none;opacity:0.2}#mermaid-svg-69bNuolHk2vVDqq2 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-69bNuolHk2vVDqq2 .section2{fill:#fff400}#mermaid-svg-69bNuolHk2vVDqq2 .section1,#mermaid-svg-69bNuolHk2vVDqq2 .section3{fill:#fff;opacity:0.2}#mermaid-svg-69bNuolHk2vVDqq2 .sectionTitle0{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .sectionTitle1{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .sectionTitle2{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .sectionTitle3{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-69bNuolHk2vVDqq2 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .grid path{stroke-width:0}#mermaid-svg-69bNuolHk2vVDqq2 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-69bNuolHk2vVDqq2 .task{stroke-width:2}#mermaid-svg-69bNuolHk2vVDqq2 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .taskText:not([font-size]){font-size:11px}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-69bNuolHk2vVDqq2 .task.clickable{cursor:pointer}#mermaid-svg-69bNuolHk2vVDqq2 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-69bNuolHk2vVDqq2 .taskText0,#mermaid-svg-69bNuolHk2vVDqq2 .taskText1,#mermaid-svg-69bNuolHk2vVDqq2 .taskText2,#mermaid-svg-69bNuolHk2vVDqq2 .taskText3{fill:#fff}#mermaid-svg-69bNuolHk2vVDqq2 .task0,#mermaid-svg-69bNuolHk2vVDqq2 .task1,#mermaid-svg-69bNuolHk2vVDqq2 .task2,#mermaid-svg-69bNuolHk2vVDqq2 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutside0,#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutside2{fill:#000}#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutside1,#mermaid-svg-69bNuolHk2vVDqq2 .taskTextOutside3{fill:#000}#mermaid-svg-69bNuolHk2vVDqq2 .active0,#mermaid-svg-69bNuolHk2vVDqq2 .active1,#mermaid-svg-69bNuolHk2vVDqq2 .active2,#mermaid-svg-69bNuolHk2vVDqq2 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-69bNuolHk2vVDqq2 .activeText0,#mermaid-svg-69bNuolHk2vVDqq2 .activeText1,#mermaid-svg-69bNuolHk2vVDqq2 .activeText2,#mermaid-svg-69bNuolHk2vVDqq2 .activeText3{fill:#000 !important}#mermaid-svg-69bNuolHk2vVDqq2 .done0,#mermaid-svg-69bNuolHk2vVDqq2 .done1,#mermaid-svg-69bNuolHk2vVDqq2 .done2,#mermaid-svg-69bNuolHk2vVDqq2 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-69bNuolHk2vVDqq2 .doneText0,#mermaid-svg-69bNuolHk2vVDqq2 .doneText1,#mermaid-svg-69bNuolHk2vVDqq2 .doneText2,#mermaid-svg-69bNuolHk2vVDqq2 .doneText3{fill:#000 !important}#mermaid-svg-69bNuolHk2vVDqq2 .crit0,#mermaid-svg-69bNuolHk2vVDqq2 .crit1,#mermaid-svg-69bNuolHk2vVDqq2 .crit2,#mermaid-svg-69bNuolHk2vVDqq2 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-69bNuolHk2vVDqq2 .activeCrit0,#mermaid-svg-69bNuolHk2vVDqq2 .activeCrit1,#mermaid-svg-69bNuolHk2vVDqq2 .activeCrit2,#mermaid-svg-69bNuolHk2vVDqq2 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-69bNuolHk2vVDqq2 .doneCrit0,#mermaid-svg-69bNuolHk2vVDqq2 .doneCrit1,#mermaid-svg-69bNuolHk2vVDqq2 .doneCrit2,#mermaid-svg-69bNuolHk2vVDqq2 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-69bNuolHk2vVDqq2 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-69bNuolHk2vVDqq2 .milestoneText{font-style:italic}#mermaid-svg-69bNuolHk2vVDqq2 .doneCritText0,#mermaid-svg-69bNuolHk2vVDqq2 .doneCritText1,#mermaid-svg-69bNuolHk2vVDqq2 .doneCritText2,#mermaid-svg-69bNuolHk2vVDqq2 .doneCritText3{fill:#000 !important}#mermaid-svg-69bNuolHk2vVDqq2 .activeCritText0,#mermaid-svg-69bNuolHk2vVDqq2 .activeCritText1,#mermaid-svg-69bNuolHk2vVDqq2 .activeCritText2,#mermaid-svg-69bNuolHk2vVDqq2 .activeCritText3{fill:#000 !important}#mermaid-svg-69bNuolHk2vVDqq2 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-69bNuolHk2vVDqq2 g.classGroup text .title{font-weight:bolder}#mermaid-svg-69bNuolHk2vVDqq2 g.clickable{cursor:pointer}#mermaid-svg-69bNuolHk2vVDqq2 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-69bNuolHk2vVDqq2 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-69bNuolHk2vVDqq2 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-69bNuolHk2vVDqq2 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-69bNuolHk2vVDqq2 .dashed-line{stroke-dasharray:3}#mermaid-svg-69bNuolHk2vVDqq2 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 .commit-id,#mermaid-svg-69bNuolHk2vVDqq2 .commit-msg,#mermaid-svg-69bNuolHk2vVDqq2 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-69bNuolHk2vVDqq2 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-69bNuolHk2vVDqq2 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-69bNuolHk2vVDqq2 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-69bNuolHk2vVDqq2 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-69bNuolHk2vVDqq2 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-69bNuolHk2vVDqq2 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-69bNuolHk2vVDqq2 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-69bNuolHk2vVDqq2 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-69bNuolHk2vVDqq2 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-69bNuolHk2vVDqq2 .edgeLabel text{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-69bNuolHk2vVDqq2 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-69bNuolHk2vVDqq2 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-69bNuolHk2vVDqq2 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-69bNuolHk2vVDqq2 .note-edge{stroke-dasharray:5}#mermaid-svg-69bNuolHk2vVDqq2 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-69bNuolHk2vVDqq2 .error-icon{fill:#522}#mermaid-svg-69bNuolHk2vVDqq2 .error-text{fill:#522;stroke:#522}#mermaid-svg-69bNuolHk2vVDqq2 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-69bNuolHk2vVDqq2 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-69bNuolHk2vVDqq2 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-69bNuolHk2vVDqq2 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-69bNuolHk2vVDqq2 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-69bNuolHk2vVDqq2 .marker{fill:#333}#mermaid-svg-69bNuolHk2vVDqq2 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-69bNuolHk2vVDqq2 {color: rgba(0, 0, 0, 0.75);font: ;}

两个Y轴
目 录
Contents
为什么需要
两个Y轴?
绘制示例
总 结
补充资源

§01 两个Y轴


1.1 为什么需要两个Y轴?

  在有的时候,需要在一张图上绘制出具有两个Y轴的曲线,这是为:

  • 绘制的两个数据曲线具有不同的物理量纲和取值范围,如果使用一个Y轴的比例,这两个曲线在尺度相差过大,使得其中一个分辨不清楚;
  • 绘制在一起主要为便于对比两个曲线,相比绘制在两个子图中更加明显。

  在博文 How to Create a Matplotlib Plot with Two Y Axes 给出了绘制方法描述,下面进行测试以备之后使用之需。

1.2 绘制示例

  使用 twinx() 函数绘制带有两个Y轴的曲线图非常容易。下面 示例演示如何是踹死 Matplotlib
  绘制带有两个 Y 轴的图标。

1.2.1 例程:创建带有两个Y轴的Matplotlib

  首先,为了演示,假设我们有两个pandas DataFrames:

import pandas as pd#create DataFrames
df1 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],'sales': [14, 16, 19, 22, 24, 25, 24, 24, 27, 30]})df2 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],'leads': [4, 4, 4, 5, 4, 5, 7, 8, 5, 3]})
df1:    year  sales
0     1     14
1     2     16
2     3     19
3     4     22
4     5     24
5     6     25
6     7     24
7     8     24
8     9     27
9    10     30
df2:    year  leads
0     1      4
1     2      4
2     3      4
3     4      5
4     5      4
5     6      5
6     7      7
7     8      8
8     9      5
9    10      3

  这两个数据都有 “year” 变量,从1 变化到 10, 第一个数据是表示每年的销售总额,第二个则显示每一年的销售总额。

  下面的代码可以创建一个Matplotlib的图表来显示两个数据,具有两个 Y 轴分别表示两个数据曲线。

import matplotlib.pyplot as plt#define colors to use
col1 = 'steelblue'
col2 = 'red'#define subplots
fig,ax = plt.subplots()#add first line to plot
ax.plot(df1.year, df1.sales, color=col1)#add x-axis label
ax.set_xlabel('Year', fontsize=14)#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize=16)#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx()#add second line to plot
ax2.plot(df2.year, df2.leads, color=col2)#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize=16)

▲ 图1.2.1 绘制的图表结果

  左边的 y-轴显示了每一年总销售量;右边的y-轴显示销售的潜在客户数据。蓝线表示的每年的销售总额,红色则表示每年的销售客户。

1.2.2 改变曲线特性

  可以使用 markerlinewidth 参数来方便改变图表中曲线的外观。

import matplotlib.pyplot as plt#define colors to use
col1 = 'steelblue'
col2 = 'red'#define subplots
fig,ax = plt.subplots()#add first line to plot
ax.plot(df1.year, df1.sales, color=col1, marker='o', linewidth=3)#add x-axis label
ax.set_xlabel('Year', fontsize=14)#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize=16)#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx()#add second line to plot
ax2.plot(df2.year, df2.leads, color=col2, marker='o', linewidth=3)#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize=16)

▲ 图1.2.2 使用曲线marker,linewidth进行修改曲线特性的图表

  上图中使用 marker=‘o’ 使得单个数据点更加凸显。

※ 总  结 ※


  本文给出了利用Matplotlib中的 twinx() 完成同一个图表中绘制具有两个 Y-轴的曲线。绘制每一个曲线的方法与普通的Plot没有什么两样。

▲ 图2.1 增加Grid的形式

col1 = 'steelblue'
col2 = 'red'plt.figure(figsize=(10,6))
plt.grid(True)
fig,ax = plt.subplots()
ax.plot(df1.year, df1.sales, color=col1, marker='o', linewidth=3)
ax.set_xlabel('Year', fontsize=14)
ax.set_ylabel('Sales', color=col1, fontsize=14)
plt.grid(True)ax2 = ax.twinx()
ax2.plot(df2.year, df2.leads, color=col2, marker='o', linewidth=3)
ax2.set_ylabel('Leads', color=col2, fontsize=16)plt.tight_layout()
plt.savefig(r"d:\temp\figure1.jpg")
plt.close()
tspshowimage(image=r"d:\temp\figure1.jpg")

2.1 补充资源

  下面的指导博文给出更多其他Matplotlib有用的特性。

  • How to Adjust Axis Label Position in Matplotlib
  • How to Set Axis Ranges in Matplotlib
  • How to Set X-Axis Values in Matplotlib

补充内容

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *t = linspace(0, 20, 1000)
sint = sin(t)
cost = cos(t)col1 = 'steelblue'
col2 = 'red'
plt.figure(figsize=(10,6))
plt.plot(t, sint, color=col1, linewidth=1)
plt.xlabel('Time', fontsize=14)
plt.ylabel('Value', color=col1, fontsize=14)
plt.grid(True)
ax2 = plt.twinx()
ax2.plot(t, cost, color=col2, linewidth=1)
ax2.set_ylabel('Value', color=col2, fontsize=16)
plt.tight_layout()
plt.savefig('/home/aistudio/stdout.jpg')
plt.show()

▲ 图2.2.1 绘制示例图


■ 相关文献链接:

  • How to Create a Matplotlib Plot with Two Y Axes
  • twinx()
  • How to Adjust Axis Label Position in Matplotlib
  • How to Set Axis Ranges in Matplotlib
  • How to Set X-Axis Values in Matplotlib

● 相关图表链接:

  • 图1.2.1 绘制的图表结果
  • 图1.2.2 使用曲线marker,linewidth进行修改曲线特性的图表

如何使用MatPlotLib绘制出具有两个 Y 轴的曲线图?相关推荐

  1. Python中用Matplotlib做多个纵轴(多y轴)

    转载自:Python中用Matplotlib做多个纵轴(多y轴) Matlab里做多给轴的函数很直接,双轴是plotyy, 三轴是plotyyy, 四轴是plot4y,更多应该是multiplotyy ...

  2. 【python】matplotlib 实现双(多)Y轴图

    [python]matplotlib 实现双(多)Y轴图 先来点简单的 两个Y轴 三个以及多个Y轴 来亿点点美化 先来点简单的 先来个最简单的画图,比如一个 y = s i n ( 2 x ) y=s ...

  3. python使用matplotlib可视化、自定义移除Y轴指定轴刻度标签(removing specific axis ticks in matplotlib y axis)

    python使用matplotlib可视化.自定义移除Y轴指定轴刻度标签(removing specific axis ticks in matplotlib y axis) 目录 python使用m ...

  4. python使用matplotlib可视化函数曲线、设置y轴为对数坐标(log scale)、默认情况下坐标轴为线性坐标

    python使用matplotlib可视化函数曲线.设置y轴为对数坐标(log scale).默认情况下坐标轴为线性坐标 目录

  5. python一个图画两条曲线_用python建立两个Y轴的XY曲线图方法

    想把python提取出来的 加载点反力和某个单元的应力画在同一个XY曲线图上,由于两者数量级差太远,故而需要建立有两个Y轴的XY曲线图. 效果为: 代码如下: #创建Quatype,作为标记,用于判断 ...

  6. python(matplotlib8)——图中图(在figure中画多个坐标图),次坐标(两个y轴)

    文章目录 前言 图中图 次坐标(两个y轴) 前言 来自 莫烦python的总结. 图中图 left,bottom,width,height = 百分比 fig = plt.figure() x = [ ...

  7. python画xy轴_用python建立两个Y轴的XY曲线图方法

    想把python提取出来的 加载点反力和某个单元的应力画在同一个XY曲线图上,由于两者数量级差太远,故而需要建立有两个Y轴的XY曲线图. 效果为: 代码如下: #创建Quatype,作为标记,用于判断 ...

  8. 用python建立两个Y轴的XY曲线图

    想把python提取出来的 加载点反力和某个单元的应力画在同一个XY曲线图上,由于两者数量级差太远,故而需要建立有两个Y轴的XY曲线图. 效果为: 代码如下: #创建Quatype,作为标记,用于判断 ...

  9. 带圆圈大小的散点图_Python数据可视化,Matplotlib绘制“散点图”的两种方法!...

    前言 散点图是Matplotlib常用图形之一,与线形图类似.但是这种图形不再由线段连接,而是由独立的点.圆圈或其他形状构成.那么怎么画散点图呢?Matplotlib给出了两种不同的方法,去画散点图. ...

最新文章

  1. android fragment 抽屉,android – 更改Fragment中的导航抽屉项目
  2. 《伊甸之路》:离“现象级”一步之遥
  3. 深入理解Golang 编程思维和工程实战
  4. SAP Netweaver后台作业的几种状态
  5. oracle定时任务会漂移,定时任务与手动执行脚本时的一个重要注意事项
  6. Google 机器学习应用的43条经验法则
  7. 软件设计师习题笔记-重点习题一
  8. 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间
  9. python怎么读取github_如何通过Python模拟登陆Github?
  10. linux date -s_Linux炫技:左手密码生成器,解放右手生产力
  11. word文字铺满页面_这5个Word问题,你会解决几个?
  12. ACL'21 | 对比学习论文一句话总结
  13. 计算机基础知识试题 试题及答案
  14. cad2012打开后闪退_windows7打不开CAD2012出现闪退的处理方法
  15. 盯市盈亏、浮动盈亏、总盈亏的计算方法
  16. win10+1060+tensorflow-gpu安装过程
  17. ArcServer 9.3 ecp、 ArcSDE 9.3 ecp、 ArcIMS 9.3 ecp、 ArcEngine 9.3 ecp
  18. android开发相册代码,Android开发之简单的电子相册实现
  19. html表格图片右对齐,更好的方式在HTML表格中右对齐文本
  20. 计算机的冷启动与热启动

热门文章

  1. 【独家】一文读懂关联分析
  2. ***如何优雅的选择字体(font-family)
  3. Effective Python 小笔记之 zip 函数
  4. Linux下安装oracle报错
  5. CentOS 6.x 播放 mp3 音乐 —— 成功
  6. linux性能调优原创翻译系列
  7. CCIE试验备考之交换SPAN
  8. Java String字符串补0或空格
  9. Maven在windows下的安装
  10. 几个进程管理的命令:pkill,pidof,kill,killall,job