当X和Y为Matrix时,Python matplotlib X刻度位置

时间:2017-08-01 14:42:03

标签: python matplotlib matrix

我遇到了一个我无法找到解决方案的重大问题。 基本上,我正在使用 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 Acess 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', 
#wich 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刻度位置值:   ax.get_position() 我得到了输出Bbox([[0.125,0.244],[0.9,0.324]])) 这并没有告诉我应该如何指定我的Xtick位置。

有人知道如何处理Bbox,或者指定这些滴答的简单方法吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了答案,

其实很简单。 当X和Y是Matrix时,pcolormesh实际上以索引的形式看到轴。

我不必在[min(X),max(X)]之间设置我的X刻度位置,而只需要在[0,len(X)]

之间修复它们