【讨论】【活跃气氛?】画格子的最佳方法
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
这问题其实是某日给差分格式画示意图的时候想到的。总之,在对有限差分的网格做示意的时候,或是其他的一些时候(具体的一时想不起来了,但是吧里以前确实出现过),我们可能会需要画出四方的格子,然后在交叉点上做些标注什么的,比如说:
箭头标注什么的我们先不管,这里只讨论画格子。画格子绝不算难,但是最简洁的方法是啥呢?
GridLines似乎很有吸引力:
range = {{0, 7}, {0, 8}};
g = Graphics[{}, GridLines -> Range @@@ range, PlotRange -> range]
可是显示范围一变就现了形:
Show[g, PlotRange -> 10]
我没想到什么特别好的变通方法,所以,大家来讨论下?
2017年11月04日 14点11分 1
吧务
level 15
xzcyr 楼主
补充:本帖的主要目标是以Mathematica编程解决此问题,不过也不排斥旁门左道解法。
2017年11月04日 14点11分 2
吧主,你好,我想请教下怎么用MMA画辐条靶呢?就是把圆按照角度划分为2n份,其中n份是黑色(数值取0),n份是白色(数值取1),黑白相间,n可以随意设置,这样的图形怎么画?或者怎样生成这样的矩阵?
2018年01月19日 03点01分
吧务
level 13
单纯画格子,我第一个想到的是 GridGraph[{7, 8}]
但Graph和Graphics不太一样,数据相对较难处理
Show[GridGraph[{7, 8}, VertexShape -> None, EdgeShapeFunction -> (Line[#] &)], PlotRange -> 10]
2017年11月04日 16点11分 3
level 7
是我把问题想的太简单了吗
grid[x1_,y1_,x2_,y2_,dx_:1,dy_:1,opt___]:=Graphics[Flatten[{Table[{opt,Line[{{x1,i},{x2,i}}]},{i,y1,y2,dy}],Table[{opt,Line[{{j,y1},{j,y2}}]},{j,x1,x2,dx}]}]]
Show[grid[1,1,4,4],PlotRange->{{0,5},{0,5}},Axes->True]
Show[Plot[5Sin[x],{x,-5,5},AspectRatio->1],grid[-2,-3,4,5,1,0.5,Gray,Dashed]]
2017年11月05日 03点11分 5
选项opt加到最前面就行了,不用每个Line前面都加
2017年11月05日 03点11分
这个当然是标准做法,但是并不简洁……
2017年12月02日 09点12分
level 8
666
2017年11月05日 03点11分 6
level 12
GraphicsComplex 如何?
2017年11月09日 04点11分 7
……怎么弄?
2017年12月02日 09点12分
@xzcyr How about ArrayPlot[ConstantArray[0, {5, 5}], Mesh -> All]
2017年12月02日 15点12分
@xzcyr GraphicsComplex 的我再想想
2017年12月02日 15点12分
@Alexander0620 ArrayPlot这个和顶楼的有类似问题,难以留出白边。(顶楼是留了白边就现形,这个是留不出白边……)
2017年12月02日 15点12分
吧务
level 13
range = {{0, 7}, {0, 8}};
Show[DensityPlot[0, {x, y} \[Element] Rectangle @@ Transpose@range,
Mesh -> Range @@@ range, ColorFunction -> (White &)],
PlotRange -> 10]
2017年11月09日 12点11分 8
这个方法不错啊!
2017年12月02日 09点12分
level 12
ArrayPlot[ConstantArray[0, {5, 6}], Mesh -> All]~Show~
Graphics[{Opacity[.05], Rectangle[{-1, -1}, {16, 8}]}]
要“白边”还不容易么?
(几十 K 大小的图 n 遍传不上,遂放弃)
2017年12月03日 06点12分 9
……是哦?
2018年01月06日 10点01分
ArrayPlot必须以原点为基准,想换地方还得再麻烦。
2018年01月19日 10点01分
level 1
gg=Graphics[{Transparent,EdgeForm[Black],Array[Rectangle[{
#1,#
2}]&,{7-1,8-1},{0,0}]}]
Show[gg,PlotRange->10]
2018年01月19日 11点01分 11
level 1
range={{x1,x2},{y1,y2}}={{0,7},{0,8}};
gg=Graphics[{Transparent,EdgeForm[Black],Array[Rectangle[{
#1,#
2}]&,{x2-1,y2-1},{x1,y1}]}]
Show[gg,PlotRange->10]
2018年01月19日 11点01分 12
1