如何为Matplotlib自定义变换网格设置坐标轴范围
如何在Matplotlib自定义坐标变换后设置坐标轴范围
要精准设置自定义变换后的坐标轴范围(即实际数据空间的范围),你需要把目标数据范围通过自定义的变换函数转换为set_xlim/set_ylim能识别的内部坐标范围,具体步骤如下:
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axisartist import (SubplotHost, GridHelperCurveLinear) fig = plt.figure() def tr(x, y): return np.log10(x) + np.log10(y), np.log10(y) - np.log10(x) def inv_tr(x, y): return 10 ** ((x - y) / 2), 10 ** ((x + y) / 2) grid_helper = GridHelperCurveLinear((tr, inv_tr)) axis = SubplotHost(fig, 111, grid_helper=grid_helper) fig.add_axes(axis) # 定义你想要的实际数据范围(变换后的坐标轴范围) target_x_min, target_x_max = 0.1, 15 target_y_min, target_y_max = 2, 20 # 将目标数据范围的边界点转换为内部坐标 X1, Y1 = tr(target_x_min, target_y_min) X2, Y2 = tr(target_x_min, target_y_max) X3, Y3 = tr(target_x_max, target_y_min) X4, Y4 = tr(target_x_max, target_y_max) # 设置内部坐标的范围,对应实际数据的目标范围 axis.set_xlim(min(X1, X2, X3, X4), max(X1, X2, X3, X4)) axis.set_ylim(min(Y1, Y2, Y3, Y4), max(Y1, Y2, Y3, Y4)) axis.grid(True) plt.show()
原理说明
set_xlim和set_ylim作用的是坐标变换后的内部坐标空间(也就是tr函数输出的(X,Y)值),而非原始数据空间的(x,y)。- 我们通过将目标数据范围的四个边界点代入自定义变换函数
tr,得到内部坐标的极值,再用这些极值设置坐标轴范围,就能精准控制图形显示的实际数据区域。
内容的提问来源于stack exchange,提问作者Balfar
相关产品推荐
相关产品推荐

