python - Python plt.axis('Equal') xlim
问题描述
我有一个简单的 3D 曲面图,我希望轴在所有方向上都相等。我有以下代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
X = np.array([-100, 0, 100])
Y = np.array([ 0, 10, 20])
X_grid, Y_grid = np.meshgrid(X,Y)
Z_grid = np.matrix('0 10 4;'
'1 11 3;'
'0 10 5')
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X_grid, Y_grid, Z_grid, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=1, antialiased=True)
plt.axis('Equal')
然后我必须手动缩小以获得适当的轴限制。我试过plt.xlim(-100,100)
了,但它似乎没有反应?另外,the plt.axis('Equal')
似乎不适用于 z 轴?
情节应该是这样的:
解决方案
您可以通过评论中的链接轻松调整策略,以便操作仅影响 XY 平面:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
X = np.array([-100, 0, 100])
Y = np.array([ 0, 10, 20])
X_grid, Y_grid = np.meshgrid(X,Y)
Z_grid = np.matrix('0 10 4;'
'1 11 3;'
'0 10 5')
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X_grid, Y_grid, Z_grid, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=1, antialiased=True)
max_range = np.array([X_grid.max()-X_grid.min(), Y_grid.max()-Y_grid.min()]).max() / 2.0
mid_x = (X_grid.max()+X_grid.min()) * 0.5
mid_y = (Y_grid.max()+Y_grid.min()) * 0.5
ax.set_xlim(mid_x - max_range, mid_x + max_range)
ax.set_ylim(mid_y - max_range, mid_y + max_range)
plt.show()
输出:
推荐阅读
- php - 执行名称未知的文件
- android - 如何在生成的源中抑制 Lint 警告?
- r - 如何创建包含日期和 NA 的数据框
- css - Shopify 主题开发 - 如何在 CSS 或内联样式中使用 section.block.variable?
- sql - 请需要 SQL MAX
- mysql - 如何以原子方式删除和获取行数据?
- regex - 如何匹配由'+'-符号分隔的n个字符长字符串?
- postgresql - 如何将索引添加到 postgres 表?
- arrays - Go 中 []Foo(nil) 和 []Foo{} 的区别
- python - 为什么并行读取大型 CSV 时节省的时间最少?