【发布时间】:2012-12-26 20:12:05
【问题描述】:
有没有办法将自定义模式放置到 imshow 图表上的选定区域中?准确地说,我需要做到这一点,除了带有数字数据的彩色方块外,我在其他方块中也有不同的图案,表示实验的不同故障模式(并且还生成一个解释这些含义的密钥不同的图案)。一个有用的模式示例是各种类型的交叉影线。我需要能够在不破坏图表上主要颜色-数字数据关系的情况下做到这一点。
以下是我尝试使用答案中建议的代码。如果我评论错误部分,则在没有来自掩码的数据的情况下,imshow 会在空白处显示良好。我什至没有尝试对不同的故障类型进行不同类型的交叉影线处理,也没有尝试处理模拟或实验工作但另一个还没有工作的情况。
EDIT3:我从多处理程序包中收到关于它如何“无法腌制”对象的错误消息。由于该程序,这是它的一部分通过多处理包。有什么方法可以解决这个问题,或者不使用 add_patches (下面建议的绘图方法不起作用,因为绘图发生在完全不同的坐标系上并绘制连接线)?
import numpy as np
import matplotlib.patches as patches
...
grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
if show_fail and faildat != []:
faildat = faildat[np.lexsort((faildat[:,yind],faildat[:,xind]))]
fails = []
for i in range(len(faildat)):
fails.append((faildat[i,1],faildat[i,0]))
for F in fails:
p = patches.Rectangle(F,1,1,hatch='/',fill=False)
plot.add_patch(p)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()
【问题讨论】:
-
抱歉,浏览代码太快了。问题是您将
ax设置为imshow返回的对象,您需要将补丁对象添加到axes对象。 -
另外,
importing matplotlib.pyplot as plot让你的代码读起来有点奇怪。 -
对不起,我修复了斧头问题,但忘记在此处更新(我从您写的内容中复制得太快了)。 matplotlib 不是作为绘图导入的,它只是在代码中更高的坐标轴被分配给绘图(它使代码在上下文中更容易阅读)。当我调用 patch 时,你会注意到它是作为 mpl 导入的。
-
你搞定了吗?我修改了关于
plot的声明,将其用作变量名,这让我很困惑。 -
你用的是什么版本的matplotlib?
标签: matplotlib graphing