Skip to main content
 首页 » 编程设计

python之Matplotlib.pyplot : How to set up a second y-axis for an existing plot

2025年05月04日29zfyouxi

我有两组线性相关的值。因此,我只需要一个具有正确比例的第二个 y 轴的单一图表。

What is the most elegant way to do this?

只制作两个条形图会产生重叠:

import numpy as np 
import matplotlib.pyplot as plt  
 
x = np.arange(4) 
y2 = np.array([23, 32, 24, 28]) 
y1 = 4.2 * y2 
 
fig = plt.figure(1, figsize=(6,6)) 
 
ax = fig.add_subplot(111) 
ax.bar(x, y2)  
ax.set_ylabel('Consumption in $m^3$') 
ax2 = ax.twinx() 
ax2.bar(x, y1, alpha=0.5)  
ax2.set_ylabel('Consumption in EUR') 
 
plt.savefig('watercomsumption.png', format='png', bbox_inches="tight") 

非常感谢! :-)


编辑:

我可能不清楚。我想制作一个单个 图表。 像下面这样的东西。但是有没有比调用 bar 函数两次并使用 alpha=0 隐藏它更优雅的方法呢?

import numpy as np 
import matplotlib.pyplot as plt 
 
x = np.arange(4) 
y2 = np.array([23, 32, 24, 28]) 
y1 = 4.2 * y2 
 
y2max = np.max(y2) * 1.1 
 
fig = plt.figure(1, figsize=(6,6)) 
 
ax = fig.add_subplot(111) 
ax.bar(x, y2) 
ax.set_ylabel('Consumption in $m^3$') 
ax2 = ax.twinx() 
 
ax2.bar(x, y1, alpha=0) 
ax2.set_ylabel('Consumption in EUR') 
 
ax.set_ylim(ymax=y2max) 
ax2.set_ylim(ymax=4.2*y2max) 
 
plt.savefig('watercomsumption.png', format='png', bbox_inches="tight") 

请您参考如下方法:

如果您不想两次调用 bar 并且只希望第二个 y 轴提供转换,那么根本就不要第二次调用 bar。您仍然可以创建和调整第二个 y 轴,实际上无需在其上绘制任何内容。

import numpy as np 
import matplotlib.pyplot as plt 
 
x = np.arange(4) 
y2 = np.array([23, 32, 24, 28]) 
y1 = 4.2 * y2 
 
y2max = np.max(y2) * 1.1 
 
fig = plt.figure(1, figsize=(6,6)) 
 
ax = fig.add_subplot(111) 
ax.bar(x, y2) 
ax.set_ylabel('Consumption in $m^3$') 
ax2 = ax.twinx() 
 
ax2.set_ylabel('Consumption in EUR') 
 
ax.set_ylim(ymax=y2max) 
ax2.set_ylim(ymax=4.2*y2max)