在Python中,Colorbar仅显示一种颜色
在我的理学学士学位范围内。论文中我必须研究流体注入井周围的孔隙压力和应力分布。我试图通过使用Spyder来解决这一部分,Spyder对我来说似乎是最好的接口,因为我几乎没有编码经验 尽管我阅读了最重要的Python和matplotlib文档,但我还是找不到解决问题的方法 首先,这是到目前为止我的代码:在Python中,Colorbar仅显示一种颜色,python,matplotlib,plot,spyder,colorbar,Python,Matplotlib,Plot,Spyder,Colorbar,在我的理学学士学位范围内。论文中我必须研究流体注入井周围的孔隙压力和应力分布。我试图通过使用Spyder来解决这一部分,Spyder对我来说似乎是最好的接口,因为我几乎没有编码经验 尽管我阅读了最重要的Python和matplotlib文档,但我还是找不到解决问题的方法 首先,这是到目前为止我的代码: # -*- coding: utf-8 -*- """ Created on Wed Oct 01 10:26:29 2014 @author: Alexander """ from mpl_
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 01 10:26:29 2014
@author: Alexander
"""
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from math import *
from scipy.special import *
import matplotlib.pyplot as plt
import numpy as np
q = 6.0/1000
rhof = 1000
lameu = 11.2*10**9
lame = 8.4*10**9
pi
alpha = 0.8
G = 8.4*10**9
k = 4*10**(-14)
eta = 0.001
t = 10*365*24*3600
kappa = k/eta
print "kappa ist:",kappa
c = ((kappa*(lameu-lame)*(lame+2*G))/((alpha**2)*(lameu+2*G)))
print "c ist:",c
xmin = -10
xmax = 10
ymin = -10
ymax = 10
X = np.arange(xmin,xmax,0.5)
Y = np.arange(ymin,ymax,0.5)
x, y = np.meshgrid(X, Y)
r=np.sqrt(x**2+y**2)
P=(q/(rhof*4*pi*kappa))*(expn(1,(r**2)/(4*c*t)))
print x,y
print P
z = P/1000000
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0,
antialiased=True)
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_xlim(xmin,xmax)
ax.set_ylim(ymin,ymax)
ax.set_title('Druckverteilung')
ax.set_xlabel('Distanz zu Well [m]')
ax.set_ylabel('Distanz zu Well [m]')
ax.set_zlabel('Druck in [MPa]')
plt.show()
我有两个主要问题:
x=5m
和y=2m
中的压力值。是否有“获取”此值的代码我将尝试绘制钻孔周围的一些应力(例如,法向应力和剪切应力)。我可以通过简单地使用你建议的假设来避免我在未来绘图中遇到的压力错误吗
z[z == np.inf] = np.nan
以及修改plot_surface命令?我之所以问这个问题,是因为我不确定我是否会在
inf
中有一个值。因为inf中有一个z值,所以色标都是蓝色的。您可以先将z中的inf值设置为nan来纠正这个问题:
z[z == np.inf] = np.nan
然后使用vmin和vmax参数告诉要绘制的值范围:
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0,
antialiased=True, vmin=np.nanmin(z), vmax=np.nanmax(z))
您可以很容易地创建一个用于计算给定x和y的z,如下所示:
def calcZ(x,y):
r=np.sqrt(x**2+y**2)
P=(q/(rhof*4*pi*kappa))*(expn(1,(r**2)/(4*c*t)))
z = P/1000000
return z
对于第一个问题,如果将
vmin=0.15,vmax=0.24
添加到ax.plot\u surface
调用中,您将得到一个彩色绘图。我不知道为什么plot_曲面在自动选择这些颜色限制方面做得不好,但我想它做得不好
关于第二个问题,如果希望能够获取任意点(不一定是网格中的点),可以使用插值函数。例如,首先创建插值函数:
from scipy.interpolate import interp2d
intrp = interp2d(X, Y, z)
然后你可以用它来计算任何你喜欢的值。您可以得到一个点:
a_single_point = intrp(2, 4)
或沿y=2从x=-3到-1的一行点:
vals = intrp(np.arange(-3, -1, .1), 2)
祝你好运 模拟邮政!我认为莫莉的解决方案更好。使用插值函数——正如我所建议的——在0附近给出
NaN
和Inf
。莫莉的选择不能做到这一点。非常感谢你!谢谢你的进一步建议!即使没有inf值,我的解决方案也会起作用。