Python和科学计算认证群组  - 讨论区

标题:谁来拯救这拙劣的绘图

2013年04月04日 星期四 16:34

1. 2D数组A对应在绘图纸上是一个平行四边形区域(非矩形),怎样才能最方便地绘制出这样的图形?


我目前有两种方案:

(1)把每一个Aij对应的位置(xij,yij)明确下来,可以用下面函数绘出:
plt.tricontourf(xij, yij, Aij, cmap=plt.cm.jet)
但是好像想得不到imshow那样的图像效果

(2)matplotlib 提供了一种坐标变换的方法,但是帮助文档中并没有相关资料,我没明白是怎么用的:
ax = plt.subplot(111)
im = ax.imshow(A)
im._image_skew_coordinate = (1, 0.5)

2013年04月04日 星期四 16:43

 一个2D周期图形的绘制。所要绘制的图形在2D平面上是周期延拓的,其单个周期为一个平行四边形,且该周期的数据已经计算出,存储在一个2D数组A中。
周期性参见附图1所示的四个平行四边形。
现在我想要绘制出来的区域不是一个平行四边形,而是这四个平行四边形结合部(圆形区域)。有没有比较好的思路实现这个图形?

我做了一个例子,采用tricontourf依次绘出四个平行四边形,然后放大显示(貌似可以了),继续放大就会发现这种方法的拙劣之处(四个平行四边形是分开的,结合部有白边,图像也不像imshow绘制的效果那么好)。

 

 

 

 

 

 

 

 

试了另一种方法:先拼出一个大平行四边形(四个组合而成的),再用imshow (一楼所说的变换方法)。最终的结果见下图,图像效果很好,但是歪了!仿射变换没用好。

2013年04月04日 星期四 16:53

我在第2楼所说的周期性,有点像2DFFT. 用fftshift可以把矩形四个角的数据移至中心显示。但是我的单个周期是个一般的平行四边形,不知道还有没有fftshift之类的方法?

另外需要指出的是:matplotlib 提供的坐标变换方法好像是1.2版本中才有的

2013年04月04日 星期四 18:54

用OpenCV里面的仿射变换试试看,应该可以把平行四边形变换成矩形。

 

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号