为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 matplotlib 轴纵横比设置为等于 twinx() 和 twiny()

如何将 matplotlib 轴纵横比设置为等于 twinx() 和 twiny()

HUX布斯 2022-06-22 19:03:07
我正在尝试制作一个所有四个面都有温度标签的情节。我可以使用 twinx() 和 twiny() 获得标签,但我无法弄清楚如何让这些轴在缩放上相等(两个比例上的一个单位相同,所以图表将是长方形)。import numpy as npimport matplotlib.pyplot as plt plt.style.use('classic')# Grid squares values:height = 21width = 31# Initialize matrix of zeros for that sizedata = np.zeros((height, width)) + 75# Make set temperatures on fixed positionsT_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 leftfor i in range(width):    data[0, i] = T_alpha    data[(height - 1), i] = T_charliefor j in range(1, (height - 1)):    data[j, 0] = T_bravo    data[j, (width - 1)] = T_delta#print(data)heatmap = plt.pcolor(data)ax = plt.axes()ax.xaxis.set_ticks_position('none')ax.yaxis.set_ticks_position('none')ax.yaxis.set_major_locator(plt.NullLocator())ax.xaxis.set_major_formatter(plt.NullFormatter())ax.set_xlabel("T = " + str(T_alpha) + "\N{DEGREE SIGN}C")ax.set_ylabel("T = " + str(T_bravo) + "\N{DEGREE SIGN}C")ax2 = ax.twinx()ax2.yaxis.set_label_position('right')ax2.yaxis.set_ticks_position('none')ax2.yaxis.set_major_locator(plt.NullLocator())ax2.set_ylabel("T = " + str(T_delta) + "\N{DEGREE SIGN}C")ax3 = ax.twiny()ax3.xaxis.set_label_position('top')ax3.xaxis.set_ticks_position('none')ax3.xaxis.set_major_formatter(plt.NullFormatter())ax3.set_xlabel("T = " + str(T_charlie) + "\N{DEGREE SIGN}C")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()这是我正在寻找的缩放比例(但所有四个边都标记了)
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

感谢@ImportanceOfBeingErnest 使用text.


这是修复:


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()

这使


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信