网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月23日漏签0天
mathematica吧 关注:19,960贴子:74,301
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 13回复贴,共1页
<<返回mathematica吧
>0< 加载中...

关于等高线图中等高线标签样式的问题

  • 只看楼主
  • 收藏

  • 回复
  • zjnone
  • 大写小写
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么在绘制等高线图的时候让等高线在标签处断开,像下图这样
ContourPlot[Cos[\[Pi]/4 (x + 1)] Cos[\[Pi] y], {x, -1, 1}, {y, -1, 1},
ColorFunction -> (Transparent &),
ContourLabels -> (Text[#3, {#1, #2}, Background -> White] &)
]

但是不会像下面这样盖住绘制的颜色?
ContourPlot[Cos[\[Pi]/4 (x + 1)] Cos[\[Pi] y], {x, -1, 1}, {y, -1, 1},
ColorFunction -> "SunsetColors",
ContourLabels -> (Text[#3, {#1, #2}, Background -> White] &)
]


  • asdasd1dsadsa
  • 小吧主
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
label是通过图元实现的,而label所在位置会有不同背景色的两个区域和一条界限。很难在graphics层面解决此问题,在image层面处理此问题可能容易些。


2026-04-23 18:41:20
广告
不感兴趣
开通SVIP免广告
  • hjq447285628
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
也许在图2的基础上用PS处理一下会更好?
也就是从像素的角度考虑,比如一个简陋的示意:
ContourPlot[Cos[\[Pi]/4 (x+1)] Cos[\[Pi] y],{x,-1,1},{y,-1,1},ColorFunction->(Transparent&),ContourLabels->(Text[#3,{#1,#2},Background->White]&)]//Rasterize;
ContourPlot[Cos[\[Pi]/4 (x+1)] Cos[\[Pi] y],{x,-1,1},{y,-1,1},ColorFunction->"SunsetColors",ContourStyle->None]//Rasterize;
ImageMultiply[%%,%]


  • xzcyr
  • 吧主
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
讲道理我觉得这种画法只适合无色等高线图。不过好不好看终究是主观的东西,这里就不多议论了。
纯在Graphics层面解决不算很难。思路很简单:提取标签的坐标,然后基于这些坐标,返回去把多余的等高线在生成阶段挖掉,最后三幅图合在一起:
wholereg = Rectangle[{-1.1, -1.1}, {1.1, 1.1}];
expr = Cos[π/4 (x + 1)] Cos[π y];
cp = ContourPlot[expr, {x, y} ∈ wholereg, ColorFunction -> (Transparent &),
ContourLabels -> (Text[#3, {#1, #2}, Background -> White] &), PlotPoints -> 100]
text = Cases[cp, Text[c_, coord__, _] :> Text[c, coord], Infinity];
coord = text[[All, 2]];
reg = RegionDifference[wholereg, RegionUnion @@ (Ellipsoid[#, {0.05, 0.04}] & /@ coord)];
(* 实践发现先把区域离散再画图更快,至少版本12.2是如此 *)
disreg = DiscretizeRegion[reg, MaxCellMeasure -> 0.005]
cpbroken = ContourPlot[expr, {x, y} ∈ disreg, ColorFunction -> (Transparent &),
PlotPoints -> 100]
cpbg = ContourPlot[expr, {x, y} ∈ wholereg, ColorFunction -> "SunsetColors",
ContourStyle -> None, PlotPoints -> 50];
Show[cpbg, cpbroken, Graphics@text]


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 13回复贴,共1页
<<返回mathematica吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示