使用imshow创建精确重复的次X/Y轴

2024-06-25 23:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在使用matplotlib.pyplot.imshow创建的颜色网格上放置一个次轴

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
import numpy as np
import struct

colornames = ['LG','MSH','AS','LM','DB','TS','DG']
hexvalues = ['B0AFA6', '988D81', '92909A','976F6F','5E4D43','D1BFA9','2F353F']
pvalues = np.array([[0.20,0.40,0.20,0.05,0.05,0.05,0.05]])
rows = 30
cols = 52

for iPDistInd in range(len(pvalues)):
    plt.figure()
    for iSubPlot in [221, 222, 223, 224]:
        ax = plt.subplot(iSubPlot)
        hexdata = np.random.choice(hexvalues,(rows,cols),p=pvalues[iPDistInd])
        rgbdata = [[struct.unpack('BBB',bytes.fromhex(y)) for y in x] for x in hexdata]


        im = plt.imshow(rgbdata, interpolation=None,
                        extent=[0.5, 0.5+cols, 0.5, 0.5+rows])

        plt.grid(True, which='both')
        ax.set_xlim(0,cols+1)
        ax.set_ylim(0,rows+1)
        ax.set_xticks(np.arange(0,cols+1,1))
        ax.set_yticks(np.arange(0,rows+1,1))
        ax.tick_params(axis='x', colors='green')
        ax.tick_params(axis='y', colors='blue')
        plt.suptitle(str(list(zip(colornames,pvalues[iPDistInd]))))
        plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()

但是我在secondary_xaxistwinx()以及tick locators上找到的所有文档都集中于在次轴上创建一个不同的轴。其他堆栈溢出答案与此类似

我只需要“顶部”和“右侧”的x轴和y轴的一对一副本。

添加

        ax2 = ax.secondary_xaxis('top')
        ay2 = ax.secondary_yaxis('right')

在for循环内部,是我能得到的最接近的,但我不确定如何操纵x和y记号,使它们与“底部”和“左侧”轴匹配。 (是的,我知道标签很拥挤,但一旦我打印到.pdf,就有足够的空间阅读它们。)

有什么建议吗


Tags: inimportformatplotlibasnppltax