algo así como plt.matshow pero con triangularjs

Básicamente, me gustaría hacer algo como lo siguiente (triangularjs, no cuadrados, como se usa típicamente con plt.matshow). introduzca la descripción de la imagen aquí

Se podría comenzar con cuatro matrices 2D, cada una representando los valores de los colores de un conjunto de triangularjs: derecha, izquierda, abajo, arriba:

import numpy as np right=np.random.randn(8, 8) left=np.random.randn(8, 8) bottom=np.random.randn(8, 8) top=np.random.randn(8, 8) 

Pero no tengo idea de la conspiración …

De hecho, puedes usar tripcolor para trazar un conjunto de triangularjs. En el código a continuación, la función quatromatrix toma 4 matrices 2D de valores al mapa de colores como entrada, crea los triangularjs y reajusta los colores para ajustarse a las posiciones respectivas. Por lo tanto, es muy similar a la representación de 4 plots de imagen.

introduzca la descripción de la imagen aquí

 import matplotlib.pyplot as plt import numpy as np def quatromatrix(left, bottom, right, top, ax=None, triplotkw={},tripcolorkw={}): if not ax: ax=plt.gca() n = left.shape[0]; m=left.shape[1] a = np.array([[0,0],[0,1],[.5,.5],[1,0],[1,1]]) tr = np.array([[0,1,2], [0,2,3],[2,3,4],[1,2,4]]) A = np.zeros((n*m*5,2)) Tr = np.zeros((n*m*4,3)) for i in range(n): for j in range(m): k = i*m+j A[k*5:(k+1)*5,:] = np.c_[a[:,0]+j, a[:,1]+i] Tr[k*4:(k+1)*4,:] = tr + k*5 C = np.c_[ left.flatten(), bottom.flatten(), right.flatten(), top.flatten() ].flatten() triplot = ax.triplot(A[:,0], A[:,1], Tr, **triplotkw) tripcolor = ax.tripcolor(A[:,0], A[:,1], Tr, facecolors=C, **tripcolorkw) return tripcolor right=np.random.randn(8, 8) left=np.random.randn(8, 8) bottom=np.random.randn(8, 8) top=np.random.randn(8, 8) fig, ax=plt.subplots() quatromatrix(left, bottom, right, top, ax=ax, triplotkw={"color":"k", "lw":1}, tripcolorkw={"cmap": "plasma"}) ax.margins(0) ax.set_aspect("equal") 

Vea el ejemplo matplotlib.pyplot.tripcolor(*args, **kwargs) en la documentación de matplotlib aquí . Aquí hay una versión simplificada de la necesidad que necesitas:

 import matplotlib.pyplot as plt import numpy as np xy = np.asarray([ [-0.01, 0.872], [-0.080, 0.883], [-0.069, 0.888], [-0.054, 0.890]]) x = xy[:, 0]*180/3.14159 y = xy[:, 1]*180/3.14159 triangles = np.asarray([[3, 2, 0] , [3, 1, 2], [ 0, 2, 1] , [0, 1, 2]]) xmid = x[triangles].mean(axis=1) ymid = y[triangles].mean(axis=1) x0 = -5 y0 = 52 zfaces = np.exp(-0.01*((xmid - x0)*(xmid - x0) + (ymid - y0)*(ymid - y0))) plt.figure() plt.gca().set_aspect('equal') plt.tripcolor(x, y, triangles, facecolors=zfaces, edgecolors='k') plt.colorbar() plt.title('tripcolor of user-specified triangulation') plt.xlabel('Longitude (degrees)') plt.ylabel('Latitude (degrees)') plt.show() 

Deberías obtener la siguiente imagen: introduzca la descripción de la imagen aquí

Utilicé el código de ImportanceOfBeingErnest para trazar la tabla Q para un proyecto de aprendizaje de refuerzo. Quería entenderlo, así que lo revisé y lo aclaré un poco. Simplemente reemplace los datos (arriba, abajo, izquierda, derecha) con los suyos.

 def showQVals(self): fig, ax = plt.subplots() rows = self.level.NUM_ROWS cols = self.level.NUM_COLUMNS up = self.q[:,Action.UP].reshape(rows, cols) down = self.q[:,Action.DOWN].reshape(rows, cols) right = self.q[:,Action.RIGHT].reshape(rows, cols) left = self.q[:,Action.LEFT].reshape(rows, cols) vertDims = np.array([[0,0],[0,1],[.5,.5],[1,0],[1,1]]) UP = [1,2,4] DOWN = [0,2,3] RIGHT = [2,3,4] LEFT = [0,1,2] triDims = np.array([DOWN, UP, RIGHT, LEFT]) verts = np.zeros((rows*cols*5,2)) tris = np.zeros((rows*cols*4,3)) for row in range(rows): #i for col in range(cols): #j cell = row*cols+col #assign slices to the newly constructed verts and tris verts[cell*5:(cell+1)*5,:] = np.c_[vertDims[:,0]+col, vertDims[:,1]+row] tris[cell*4:(cell+1)*4,:] = triDims + cell*5 C = np.c_[ up.flatten(), down.flatten(), right.flatten(), left.flatten() ].flatten() ax.invert_yaxis() ax.set_title('Q Values') triplot = ax.triplot(verts[:,0], verts[:,1], tris) tripcolor = ax.tripcolor(verts[:,0], verts[:,1], tris, facecolors=C) fig.colorbar(tripcolor) plt.show() 

Figura de tabla q basada fuera de mapa de cuadrícula