我有一个大问题,我似乎找不到任何解决方案。基本上,我正在使用matplotlib工具中的pcolormesh绘制一个2D字段。
现在,如果我想绘制2D字段,X和Y是我的X和Y维度,C是我想用pcolormesh绘制的矩阵,我所要做的就是:(请注意,下面的代码是我的实际代码的一个很大的简化)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap
number_of_ticks=10 # Insert number of ticks wanted
#'Insert here a non pertinent section of 1000 lines of code where I Access the data to my '
#'variable C and my dimensions X and Y,
#'All we need to know is that X and Y are arrays, and C is a Matrix'
fig,ax = plt.subplots(1,1,figsize=(15,12),squeeze= False)
given_positions=np.linspace(min(X),max(X),number_of_ticks)
# Un necessary section here where I create a new array 'axticklatlonname',
#which are the names for the 10 ticks that I created earlier with given_positions
new_tick_location=given_positions
ax.set_xticks(new_tick_locations)
ax.set_xticklabels(axticklatlonname)
mycmap=get_cmap('Jet')
mycmap.set_over('b')
col=ax.pcolormesh(X,Y,C,norm=LogNorm(vmin=-60,vmax=10),cmap=mycmap,shading='flat')
cbar=fig.colorbar(col,ax=ax)
cbar.ax.set_ylabel('TT')
cbar_ax=fig.add_axes
字符串
到目前为止,它工作,它产生了我想要的结果。
我的问题是我的维度Y实际上也是一个变量;我的高度取决于我在X轴上的位置。
这意味着绘图将改变,因为C矩阵中的Y位置对于每个X位置不再是恒定的。
我通过将我的Y数组改为矩阵,并将我的X数组改为具有Y等价X数组的矩阵来解决这个问题;
Xmatrix=np.tile(X(len(Y),1))
型
现在我可以使用pcolormesh绘图:
col=ax.pcolormesh(Xmatrix,Ymatrix,C,norm=LogNorm(vmin=-60,vmax=10),cmap=mycmap,shading='flat')
型
现在的问题是,我不能指定我的X刻度位置。
我尝试通过执行以下操作来获取默认的X tick位置值:ax.get_position()
我得到了一个输出Bbox([[0.125,0.244],[0.9,0.324]]))这并没有告诉我如何指定我的Xtick位置。
有人知道如何处理Bbox,或者一个简单的方法来指定这些滴答声吗?
1条答案
按热度按时间imzjd6km1#
我终于找到了答案
其实很简单当X和Y是Matrix时,pcolormesh实际上以索引的形式看到轴。
我没有在[min(X),max(X)]之间设置我的X刻度位置,我只需要将它们固定在[,len(X)]之间