Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,Colorbar仅显示一种颜色_Python_Matplotlib_Plot_Spyder_Colorbar - Fatal编程技术网

在Python中,Colorbar仅显示一种颜色

在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_

在我的理学学士学位范围内。论文中我必须研究流体注入井周围的孔隙压力和应力分布。我试图通过使用Spyder来解决这一部分,Spyder对我来说似乎是最好的接口,因为我几乎没有编码经验

尽管我阅读了最重要的Python和matplotlib文档,但我还是找不到解决问题的方法

首先,这是到目前为止我的代码:

# -*- 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()
我有两个主要问题:

  • 打印后,我的颜色栏只显示1种颜色(蓝色),我不知道为什么。我在这个网站上查找了类似的问题,但没有找到合适的解决方案。我怎样才能做到这一点

  • 假设我想知道从注射点(x,y=0)开始,坐标
    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值,我的解决方案也会起作用。