matplotlib画3D图的问题

时间:2021-01-05 23:39:27
​如果我画三维图的Z是由文件读取的矩阵,那么它就不是由X,Y计算得出的,这种情况下,怎么才能画出三维图,网上的例子都是由X,Y计算Z

7 个解决方案

#1


求GUI大神

#2



from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

这是文档中的例子, Z就是一个矩阵. 事实上, 即使你要画一个函数, 也要根据该函数求出相应的Z矩阵.

#3


您好,这个例子我看过,它的Z是直接算出来的,但是在实际中,我想由一个TXT文本读入一个矩阵Z,这时它不是算出来的,请问怎么跟文本中自己的行X列Y去匹配画出来

#4


引用 2 楼 panghuhu250 的回复:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

这是文档中的例子, Z就是一个矩阵. 事实上, 即使你要画一个函数, 也要根据该函数求出相应的Z矩阵.


您好,这个例子我看过,它的Z是直接算出来的,但是在实际中,我想由一个TXT文本读入一个矩阵Z,这时它不是算出来的,请问怎么跟文本中自己的行X列Y去匹配画出来

#5


首先说下作图我不懂
然后既然例子是XY求Z做图
那么楼主不能逆向反算XY吗

#6


您好 ,同求问! 请问楼主现在解决了吗 怎么解决的

#7


试试rasterio模块,用rio,open(路径)打开你的txt试试

#1


求GUI大神

#2



from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

这是文档中的例子, Z就是一个矩阵. 事实上, 即使你要画一个函数, 也要根据该函数求出相应的Z矩阵.

#3


您好,这个例子我看过,它的Z是直接算出来的,但是在实际中,我想由一个TXT文本读入一个矩阵Z,这时它不是算出来的,请问怎么跟文本中自己的行X列Y去匹配画出来

#4


引用 2 楼 panghuhu250 的回复:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

这是文档中的例子, Z就是一个矩阵. 事实上, 即使你要画一个函数, 也要根据该函数求出相应的Z矩阵.


您好,这个例子我看过,它的Z是直接算出来的,但是在实际中,我想由一个TXT文本读入一个矩阵Z,这时它不是算出来的,请问怎么跟文本中自己的行X列Y去匹配画出来

#5


首先说下作图我不懂
然后既然例子是XY求Z做图
那么楼主不能逆向反算XY吗

#6


您好 ,同求问! 请问楼主现在解决了吗 怎么解决的

#7


试试rasterio模块,用rio,open(路径)打开你的txt试试