Python 具有非矩形网格的类imagesc特征[MATLAB]

Python 具有非矩形网格的类imagesc特征[MATLAB],python,matlab,Python,Matlab,如果我想在每个网格单元中用不同的颜色给一个正方形网格上色,那么在MATLAB中只需调用imagesc命令,就可以了 如果我想给网格中的不同单元格着色,如下图所示: 默认情况下,python或Matlab中是否提供此功能?我试着用非常小的正方形单元离散这个网格。然后给每个细胞着色。这很有效。但这似乎很平常。有没有更聪明的方法来完成他的任务?在python中,有轴的内置polar投影。此投影允许您自动使用极坐标中的几乎所有打印方法。特别是,您需要按如下方式使用pcolor或pcolormesh i

如果我想在每个网格单元中用不同的颜色给一个正方形网格上色,那么在MATLAB中只需调用
imagesc
命令,就可以了

如果我想给网格中的不同单元格着色,如下图所示:


默认情况下,python或Matlab中是否提供此功能?我试着用非常小的正方形单元离散这个网格。然后给每个细胞着色。这很有效。但这似乎很平常。有没有更聪明的方法来完成他的任务?

在python中,有
轴的内置
polar
投影。此投影允许您自动使用极坐标中的几乎所有打印方法。特别是,您需要按如下方式使用
pcolor
pcolormesh

import numpy as np
from matplotlib import pyplot as plt

r = np.linspace(0,4,5)
theta = np.linspace(0,2*np.pi,10)
theta,r = np.meshgrid(theta,r)
values = np.random.rand(*(theta.shape))

ax = plt.subplot(111,polar=True)
ax.pcolor(theta,r,values)
plt.show()
请注意,这将生成如下图

这几乎就是你想要的。明显的问题是,面片顶点由直线连接,而不是由沿圆弧的直线连接。可以通过使角度阵列更密集来解决此问题。这里有一个可行的方法

import numpy as np
from matplotlib import pyplot as plt

r = np.linspace(0,4,5)
theta = np.linspace(0,2*np.pi,10)

values = np.random.rand(r.size,theta.size)

dense_theta = np.linspace(0,2*np.pi,100)
v_indeces = np.zeros_like(dense_theta,dtype=np.int)
i = -1
for j,dt in enumerate(dense_theta):
    if dt>=theta[i+1]:
        i+=1
    v_indeces[j] = i

T,R = np.meshgrid(dense_theta,r)

dense_values = np.zeros_like(T)

for i,v in enumerate(values):
    for j,ind in enumerate(v_indeces):
        dense_values[i,j] = v[ind]

ax = plt.subplot(111,polar=True)
ax.pcolor(T,R,dense_values)
plt.show()
那会产生什么


我不知道在matlab中有什么方法可以做到这一点,但我在谷歌上搜索了一下,发现它可以在极坐标下生成
pcolor
图。您应该查看它。

在python中,有
轴的内置
极轴投影。此投影允许您自动使用极坐标中的几乎所有打印方法。特别是,您需要按如下方式使用
pcolor
pcolormesh

import numpy as np
from matplotlib import pyplot as plt

r = np.linspace(0,4,5)
theta = np.linspace(0,2*np.pi,10)
theta,r = np.meshgrid(theta,r)
values = np.random.rand(*(theta.shape))

ax = plt.subplot(111,polar=True)
ax.pcolor(theta,r,values)
plt.show()
请注意,这将生成如下图

这几乎就是你想要的。明显的问题是,面片顶点由直线连接,而不是由沿圆弧的直线连接。可以通过使角度阵列更密集来解决此问题。这里有一个可行的方法

import numpy as np
from matplotlib import pyplot as plt

r = np.linspace(0,4,5)
theta = np.linspace(0,2*np.pi,10)

values = np.random.rand(r.size,theta.size)

dense_theta = np.linspace(0,2*np.pi,100)
v_indeces = np.zeros_like(dense_theta,dtype=np.int)
i = -1
for j,dt in enumerate(dense_theta):
    if dt>=theta[i+1]:
        i+=1
    v_indeces[j] = i

T,R = np.meshgrid(dense_theta,r)

dense_values = np.zeros_like(T)

for i,v in enumerate(values):
    for j,ind in enumerate(v_indeces):
        dense_values[i,j] = v[ind]

ax = plt.subplot(111,polar=True)
ax.pcolor(T,R,dense_values)
plt.show()
那会产生什么


我不知道在matlab中有什么方法可以做到这一点,但我在谷歌上搜索了一下,发现它可以在极坐标下生成
pcolor
图。你应该去看看。

你需要创建自己的自定义
补丁
对象任何我可以轻松学习的网站?你需要创建自己的自定义
补丁
对象任何我可以轻松学习的网站?