公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+2 投票
3.0k 浏览

在使用ListContourPlot的过程中,发现制作出来的图片不闭合,请问究竟是什么原因?
使用的数据是一个岛屿的经纬和海拔数据,一共一万多个数据点

源代码:

A = Import["C:\\...\\island.xlsx"];
ListContourPlot[A, ContourShading -> None]

数据文件链接:http://pan.baidu.com/s/1o82ALYi

分类:绘图 | 用户: zhenzhi46 (26 分)
修改于 用户:zhenzhi46
最好想办法附上数据文件。
代码啊啊啊啊啊!!!有代码好分析
已经上传了数据文件和源代码
想想还是再评论一条……或许是由于版本8/9的性能限制(潜在Bug?)吧,你的这个数据在版本8/9是画不出来的(ListContourPlot还有一些跟计算几何有关的函数在这组数据面前全跪……),所以下面这个思路我没能成功测试,但是版本10的话应该值得一试:你试试先插值再绘图看看会不会好一点,注意插值的话需要调用这个obtuse程序包(Mathematica目前没内置非结构化网格的插值):http://www.familydahl.se/mathematica/#Obtuse
题主,我想我是认识你的!
谢谢,我用的就是10,也许需要程序包
有可能啊,你也是科大的?

2 个回答

+3 投票
 
已采纳

我不清楚造成画图不连续的原因,就这组数据而言,你可以尝试把MaxPlotPoints选项调低至65,就不会出现不连续。但是这样会造成图片质量降低。我观察了一下画出来的图:

发现他的Contour确实不封闭,然而Shading却有明确分界线,而且与Contour连续部分吻合。所以我觉得可以提取Shading包含的曲线信息。由于过程非常复杂,如果题主有兴趣的话我再展开说,现在就直接贴代码了。

extractContourShading[plot_] := 
  Show[RegionPlot[
       BoundaryMesh@
        DiscretizeGraphics@(Graphics @@ ((tempHead @@ 
                plot /. {{EdgeForm[], RGBColor[___], 
                  GraphicsGroup[___], ___} -> myPlaceholder, 
                Tooltip[___] -> 
                 Nothing}) /. {myPlaceholder ..} -> {#})), 
       BoundaryStyle -> Black, PlotRange -> All] /. 
      RGBColor[___] -> RGBColor[1, 1, 1] & /@ 
    Cases[plot, {EdgeForm[], RGBColor[___], GraphicsGroup[___], ___}, 
     Infinity]];
extractContourShading[ListContourPlot[data]]

效果如下

用户: happyfish (1.8k 分)
采纳于 用户:zhenzhi46
+2 投票

估计是数据不规范造成的,比如同一个海拔的数据不是简单的封闭曲线,请仔细检查。

如果要着色,可以指定合适的Contours,或者将其它设为自动。

 

建议使用规范地理信息数据格式,比如:kml, kmz, shp 等,这些Mma都是支持的。

我的主页的推荐了一些GIS数据下载的网站:http://laoli.cm/Collection/DataSouce/

用户: 野鹤 (5.1k 分)
数据确实是不好,按海拔分开后用ListPlot检查的话会特别明显,ListCurvePathPlot的执行结果可以佐证。(总不会是在这个地块上其实有好几个峰吧……)不过不确定这组数据是不是就一定不能用。我在问题下面的评论里提供了一个思路(我没装版本10所以验证不了),你有空的话可以试下……
地块是钓鱼岛,我是用google earth取出来的数据,当时不知道mma也支持kml,所以才转成xlsx格式的,我会去试一试那个工具包的
嗯。Google Earth 支持导出KML。
...