Python 如何使用twinx()和twiny()将matplotlib轴纵横比设置为相等

Python 如何使用twinx()和twiny()将matplotlib轴纵横比设置为相等,python,numpy,matplotlib,Python,Numpy,Matplotlib,我想画一个四面都有温度标签的图。我可以用twinx()和twiny()获得标签,但我不知道如何使这些轴在缩放时相等(两个缩放时一个单位是相同的,因此图形应该是矩形) 这是我正在寻找的缩放比例(但所有四个面都已标记): 谢谢 感谢@ImportanceOfBeingErnest使用文本为我指明了正确的方向 以下是修复方法: import numpy as np import matplotlib.pyplot as plt plt.axes().set_aspect('equal') plt

我想画一个四面都有温度标签的图。我可以用twinx()和twiny()获得标签,但我不知道如何使这些轴在缩放时相等(两个缩放时一个单位是相同的,因此图形应该是矩形)

这是我正在寻找的缩放比例(但所有四个面都已标记):


谢谢

感谢@ImportanceOfBeingErnest使用
文本
为我指明了正确的方向

以下是修复方法:

import numpy as np
import matplotlib.pyplot as plt 

plt.axes().set_aspect('equal')
plt.style.use('classic')

# Grid squares values:
height = 21
width = 31

# Initialize matrix of zeros for that size
data = np.zeros((height, width)) + 75

# Make set temperatures on fixed positions
T_alpha   = 0    # (bottom boundary temperature)
T_bravo   = 40   # (left boundary temperature)
T_charlie = 100  # (top boundary temperature)
T_delta   = 100  # (right boundary temperature)

# Note: index 0,0 is bottom left

for i in range(width):
    data[0, i] = T_alpha
    data[(height - 1), i] = T_charlie
for j in range(1, (height - 1)):
    data[j, 0] = T_bravo
    data[j, (width - 1)] = T_delta

#print(data)

heatmap = plt.pcolor(data)

plt.text(0.5, -0.02, "T = " + str(T_alpha) + "\N{DEGREE SIGN}C",
         horizontalalignment='center',
         verticalalignment='top',
         rotation=0,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(0, 0.5, "T = " + str(T_bravo) + "\N{DEGREE SIGN}C",
         horizontalalignment='right',
         verticalalignment='center',
         rotation=90,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(0.5, 1, "T = " + str(T_charlie) + "\N{DEGREE SIGN}C",
         horizontalalignment='center',
         verticalalignment='bottom',
         rotation=0,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(1, 0.5, "T = " + str(T_delta) + "\N{DEGREE SIGN}C",
         horizontalalignment='left',
         verticalalignment='center',
         rotation=270,
         clip_on=False,
         transform=plt.gca().transAxes)

plt.axis("off")

plt.xlim(0, width)
plt.ylim(0, height)

cbar = plt.colorbar(heatmap)
cbar.set_label("Temperature (\N{DEGREE SIGN}C)")
plt.clim(0, 100)

plt.show()
其中:

当您只需要图像旁边的
文本时,没有理由使用双轴。如果您需要帮助了解更高级的索引技巧和矢量化,那么main可能不是最佳场所。但你通常可以在这里找到我和其他人。
import numpy as np
import matplotlib.pyplot as plt 

plt.axes().set_aspect('equal')
plt.style.use('classic')

# Grid squares values:
height = 21
width = 31

# Initialize matrix of zeros for that size
data = np.zeros((height, width)) + 75

# Make set temperatures on fixed positions
T_alpha   = 0    # (bottom boundary temperature)
T_bravo   = 40   # (left boundary temperature)
T_charlie = 100  # (top boundary temperature)
T_delta   = 100  # (right boundary temperature)

# Note: index 0,0 is bottom left

for i in range(width):
    data[0, i] = T_alpha
    data[(height - 1), i] = T_charlie
for j in range(1, (height - 1)):
    data[j, 0] = T_bravo
    data[j, (width - 1)] = T_delta

#print(data)

heatmap = plt.pcolor(data)

plt.text(0.5, -0.02, "T = " + str(T_alpha) + "\N{DEGREE SIGN}C",
         horizontalalignment='center',
         verticalalignment='top',
         rotation=0,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(0, 0.5, "T = " + str(T_bravo) + "\N{DEGREE SIGN}C",
         horizontalalignment='right',
         verticalalignment='center',
         rotation=90,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(0.5, 1, "T = " + str(T_charlie) + "\N{DEGREE SIGN}C",
         horizontalalignment='center',
         verticalalignment='bottom',
         rotation=0,
         clip_on=False,
         transform=plt.gca().transAxes)
plt.text(1, 0.5, "T = " + str(T_delta) + "\N{DEGREE SIGN}C",
         horizontalalignment='left',
         verticalalignment='center',
         rotation=270,
         clip_on=False,
         transform=plt.gca().transAxes)

plt.axis("off")

plt.xlim(0, width)
plt.ylim(0, height)

cbar = plt.colorbar(heatmap)
cbar.set_label("Temperature (\N{DEGREE SIGN}C)")
plt.clim(0, 100)

plt.show()