如何在Python中的函数指定的域中进行三维绘制?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中的函数指定的域中进行三维绘制?相关的知识,希望对你有一定的参考价值。
所以我试图用matplotlib.pyplot
绘制三维图,但仅限于边界由函数设置的特定域。这是代码
import numpy
from scipy.integrate import quad
import matplotlib.pyplot
import matplotlib.ticker
from mpl_toolkits.mplot3d import Axes3D
def get_x1min(pT, eta, rS):
return (pT * numpy.exp(eta)) / (rS - pT * numpy.exp(- eta))
def get_x2(x1, pT, eta, rS):
return (x1 * pT * numpy.exp(- eta)) / (x1 * rS - pT * numpy.exp(eta))
rS = 1960.0
eta = 0.0
pT = [66.0, 77.5, 89.5, 92.0, 94.0, 96.0, 98.0, 100.0, 103.0, 105.0, 107.0, 109.0, 111.0, 113.0, 118.5, 136.5, 157.5, 182.0, 200.0, 209.5, 241.5, 278.5, 321.0, 370.0, 426.5, 492.0]
fig = matplotlib.pyplot.figure()
ax = Axes3D(fig)
x1_test = numpy.linspace(0.1, 1.0, 20)
x1_test, pT = numpy.meshgrid(x1_test, pT)
x2_test = get_x2(x1_test, pT, eta, rS)
ax.plot_surface(x1_test, pT, x2_test, rstride=1, cstride=1, cmap=matplotlib.pyplot.get_cmap('rainbow'))
matplotlib.pyplot.show()
这工作正常但是域是一个矩形,唯一需要改变的是让x1_test
从一个可以从函数get_x1min
获得的最小值开始。有没有办法做到这一点?
提前致谢!
答案
您可以将不需要的值设置为np.nan
,然后不会绘制它们。请注意,色彩映射似乎存在一些问题。你可以使用vmin
和vmax
关键字解决这个问题:
mask = x1_test< get_x1min(pT, eta, rS)
x2_test[mask] = numpy.nan
ax.plot_surface(
x1_test, pT, x2_test, rstride=1, cstride=1,
cmap=matplotlib.pyplot.get_cmap('rainbow'),
vmin = numpy.nanmin(x2_test),
vmax = numpy.nanmax(x2_test),
)
matplotlib.pyplot.show()
其余的代码将保持不变。结果看起来像这样:
以上是关于如何在Python中的函数指定的域中进行三维绘制?的主要内容,如果未能解决你的问题,请参考以下文章