imagesc类似非矩形网格的特征[MATLAB]

时间:2017-01-27 22:51:27

标签: python matlab

如果我想在每个网格单元中为不同颜色的方形网格着色,那么可以在MATLAB中简单调用imagesc Map<Person, Long> personToSalary之类的Map<String, Long> lastnameToSalary命令。

如果我想在网格中为不同的单元格着色,如下所示: here

默认情况下,这个功能在python或Matlab中是否可用?我尝试用非常小的方形单元离散这个网格。然后为每个细胞着色。这样可行。但这似乎很普通。是否有更聪明的方法来完成他的工作?

1 个答案:

答案 0 :(得分:0)

在python中,polar有内置axes投影。此投影允许您自动使用极坐标中的每种绘图方法。特别是,您需要pcolorpcolormesh,如下所示

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()

请注意,这会产生这样的情节

default polar pcolor behavior

这几乎是你想要的。显而易见的问题是补丁顶点由直线连接,而不是圆弧后面的线。你可以通过使角度数组更密集来解决这个问题。这是一种可行的方法。

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()

哪会产生

improved pcolor

我不知道在matlab中做到这一点的方法,但我用Google搜索并发现this表示它可以在极坐标中生成pcolor图。你应该看看它。