我想制作一个堆积条形图,其中:
y axis : md litho
x axis : litho
数据:
![enter image description here](https://i.stack.imgur.com/Smjgo.png)
我已经尝试使用我修改过的代码来实现它另一个问题在堆栈溢出上。
path = pd.ExcelFile('F:\Backup\JN\Litologi\lito.xlsx')
data = pd.read_excel(path)
lito = data['litho']
d2 = {'ABT': 1, 'AT': 2, 'BAT': 3, 'BTT':4, 'GT':5, 'NC':6, 'TT':7}
litocode = lito.map(d2)
ccc = ['firebrick','red', 'peru', 'salmon', 'maroon', 'ghostwhite','pink']
cmap_facies = colors.ListedColormap(ccc[0:len(ccc)], 'indexed')
cluster = np.repeat(np.expand_dims(litocode.values, 1), 1, 1)
print(cluster)
f, ax = plt.subplots(nrows=1, ncols=1, figsize=(1,5))
depth = data['md litho']
ax.imshow(cluster, interpolation='none', aspect='auto', cmap=cmap_facies,
vmin=1, vmax=7, extent=[0,7 ,np.max(depth),np.min(depth)])
plt.tick_params(bottom=False, labelbottom=False)
hands = []
for k, col in zip(d2.keys(), ccc):
hands.append(mpatches.Patch(color=col, label=k))
plt.legend(handles=hands, loc=(1.05, 0.5), fontsize=12)
上面的代码产生了下图。但我注意到,根据光刻列中的数据数量,y 轴被均匀地 (0 - 442) 分为 7 个数据簇,但没有考虑 y 值 (md 光刻)。
![enter image description here](https://i.stack.imgur.com/8042O.png)
所以问题是:如何使图形看起来像上面那样,但具有这种间隔,其中每个间隔都被特定颜色阻挡/填充:
Interval = key (color)
0-31 = NC (ghostwhite)
31-49 = AT (red)
49-67 = BTT (salmon)
67-406 = NC (ghostwhite)
406-427 = ABT (firebrick)
427-442 = BAT (peru)
每当我在 Excel 中有数据时,如下所示,
![enter image description here](https://i.stack.imgur.com/szCIX.png)
与文件中具有最长行的其他列(本例中为 mbt 数据组)相比,光刻数据组(md、elev、litho)更短或更少,它显示:
ValueError: x and y arguments to pcolormesh cannot have non-finite values or be of type numpy.ma.core.MaskedArray with masked values
我认为脚本以某种方式读取了光刻数据组的整列,直到 mbt 数据组后面的最大行,即使它什么也没有。
我可以做什么来解决这个问题?
我已经尝试将数据移动到其他列,但它不起作用。
我还尝试使用我读入的脚本来屏蔽这些值pcolormesh 缺少值?但它仍然不起作用。
Z=well['litho'][:-1].map(lithcode).to_numpy().reshape(-1, 1)
Zm = ma.array(Z,mask=np.isnan(Z))
cl.pcolormesh([0, 1], well['elev litho'], Zm, cmap=cmap, vmin=1, vmax=len(colors))