python - 如何使用 set_cmap 设置 yt.SlicePlot 的颜色条限制?

标签 python numpy matplotlib colorbar yt-project

我对 Python 完全陌生,我完全迷失了。 我的主管帮助我生成了一个脚本来查看 3D 速度模型的一些切片:

import numpy as np
import matplotlib.pyplot as plt
import yt
from yt.units import km

#Import et reshape data
d = np.genfromtxt('velocity_model.txt', delimiter=' ')
nd=22
nx=131
vel = d[:,3].reshape(nd,nx,nx)
lat = d[:,0].reshape(nd,nx,nx)
lon = d[:,1].reshape(nd,nx,nx)
dep = d[:,2].reshape(nd,nx,nx)
# When this is read into YT, depth increases along x axis, longitude increases along y axis and latitude increases along z axis, need to swap x and z and then flip z
dep=dep.swapaxes(0,2) # swap first and third dimensions: gives lon (x), lat (y), depth (z)
vel=vel.swapaxes(0,2) # swap first and third dimensions: 
lat=lat.swapaxes(0,2) # swap first and third dimensions: 
lon=lon.swapaxes(0,2) # swap first and third dimensions: 
dep=dep[:,:,::-1] # reverse z direction
vel=vel[:,:,::-1] # swap first and 2nd dimensions: 
lat=lat[:,:,::-1] # swap first and 2nd dimensions: 
lon=lon[:,:,::-1] # swap first and 2nd dimensions: 
xmin=0
xmax=289
ymin=0
ymax=289
zmin=-100
zmax=5

#Entrer dans YT
data=dict(velocity=(vel,'km/s'),latitude=(lat,'deg'),longitude=(lon,'deg'),depth=(dep,'km'))
bbox = np.array([[xmin,xmax], [ymin,ymax], [zmin,zmax]])
ds=yt.load_uniform_grid(data,vel.shape, length_unit='km', bbox=bbox)

#Off-Axis Slice
for key in ['latitude','longitude','depth','velocity'] :
     L = [0,0,1] # cutting plane=z
     slicepos=-50
     c = [(xmax-xmin)/2, (ymax-ymin)/2, slicepos]
     cut = yt.SlicePlot(ds, L, key,origin='native',center=c) #, width=(200,90,'km'))
     cut.set_log(key, False)
     cut.annotate_text([0.5,0.9],'z={:d} km'.format(slicepos),coord_system='axis')
     cut.set_cmap(field='velocity',cmap='jet_r')
     cut.save()

通过这个脚本,我想修复颜色条,因为对于每个图像来说,这个颜色条都会发生变化,并且这样解释并不容易。

我尝试添加这样的限制:

h=colorbar
h.Limits = [5 9]
cut.set_cmap(field='velocity',cmap='jet_r', h)

但这不是好方法。有人有主意吗?我看到了很多东西,但没有看到cmap。

最佳答案

您正在寻找 set_zlim 函数:

http://yt-project.org/doc/reference/api/generated/yt.visualization.plot_window.AxisAlignedSlicePlot.set_zlim.html

set_cmap 函数仅允许您选择您想要的哪个颜色图,它不允许您设置颜色图范围。您需要为此使用 set_zlim 。这是一个示例,使用 http://yt-project.org/data 中的示例数据集之一:

import yt
ds = yt.load('IsolatedGalaxy/galaxy0030/galaxy0030')
plot = yt.SlicePlot(ds, 2, 'density')
plot.set_cmap('density', 'viridis')
plot.set_zlim('density', 1e-28, 1e-25)

这会产生以下图像:

enter image description here

关于python - 如何使用 set_cmap 设置 yt.SlicePlot 的颜色条限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118747/

相关文章:

python - try and except 方法来禁用错误消息

python - 根据日期范围按类别计算总发生次数和发生次数

python - 为什么 numpy ma.average 比 arr.mean 慢 24 倍?

python - 使用 `plot_date()` 在日期图上使用颜色循环设置颜色

python - matplotlib 补丁集合中的 Zorder 规范?

python - 索引中按日期排列的多个箱线图

python - 如何限制 Numpy 中的互相关窗口宽度?

python - 如何移动 Pandas 数据框中的列

python - 使用np.where使用自创建函数向pandas添加列

Python - 从 numpy 表创建字典以显示列表