2011-12-31 10 views
4

私は以下のプロットを持っています。私はこれらの黒い四角の色によって影が薄くされる黒い四角のための灰色の境界線/グリッドを希望するMathematicaでArrayPlotの灰色の境界を取り除くにはどうすればよいですか?

lst={{1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 
    0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 
    0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 
    1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 1, 1, 1, 1}}; 
ArrayPlot[lst, Mesh -> All, 
MeshStyle -> Directive[AbsoluteThickness[3.], Gray, Opacity[0.1]]] 

enter image description here

しかし、私は期待どおりには見えません。白い四角の灰色の境界線/グリッドのみを表示します。

+0

あなたの質問は私にはあまり明確ではありません。あなたのコードの出力をあなたの質問にアップロードしました。あなたの質問の私の理解から: "唯一の白い四角の灰色の境界線/グリッドを表示する"、出力が正しいように見える。黒い四角の灰色の境界はありません。他に何か覚えていたのですか、別の出力を得ていますか?または、最も外側の灰色の境界線を意味しましたか? – abcd

+0

@yoda:黒い四角形の境界の影がまだ見えますか? –

+0

私は今それを見る。それは最初は明白ではなかった(おそらく私のモニターのせいかもしれないが)、それをより明るい色に変えて明らかにした。グリッドの残りの部分が描かれているので、 'Grid'は常にレイアウトされているので、これは簡単ではないかもしれません。これを回避するための文書化されていないオプションがありますが、私は今それを覚えているようには見えません。私は検索しましょう... – abcd

答えて

4

これは、組み込みのオプション(AFAIK)を使用して簡単に解決できるものではありません。必要な行と列でのみグリッド線をプロットするカスタム関数を定義し、それ以外のものをマスクすることができます。ここに私の解決策は次のとおりです。

gridArrayPlot[mat_?MatrixQ, options___] := Module[{dim = [email protected]}, 
    Show[ 
    ArrayPlot[mat, Mesh -> ({Range[#1 - 1], Range[#2 - 1]} & @@ dim), options], 
    ArrayPlot[mat, Mesh -> ({{0, #1}, {0, #2}} & @@ dim), 
     ColorRules -> {0 -> Directive[[email protected], White]}, 
     options /. Opacity[_] :> Opacity[1] /. (RGBColor[___] | GrayLevel[_]) :> White 
    ] 
    ] 
] 

上記の溶液が第一の外側の境界以外でどこでもメッシュを描く、ArrayPlotをプロットし、透明になるように設定White細胞と二ArrayPlotを重ねて、上のWhiteメッシュラインを描きます外側境界(前のプロットから突き出ているビットをマスクする)。

あなたは

gridArrayPlot[lst,MeshStyle -> Directive[AbsoluteThickness[3.],Gray,Opacity[0.1]]] 

として上記の関数を呼び出すことができ、出力は次のとおりです。ちょうどグリッド線とメッシュラインを捨てるとEpilogLineの使用に関する

enter image description here

3

どのように?

ArrayPlot[lst, Mesh -> False, Frame -> False, 
Epilog -> {GrayLevel[0.5], AbsoluteThickness[1], 
    [email protected][{{2 + i, 8}, {2 + i, 1}}, {i, 0, 5}], 
    [email protected][{{1, 2 + i}, {8, 2 + i}}, {i, 0, 5}]}] 

enter image description here

これは明らかに、このデータのリストに固有のものですが、あなたは「×」ユニット黒「境界線」を持っているデータと「Y」倍「Y」白い四角に一般化する簡単です(つまり、y + 2xの行と列のリスト)。

gridArrayPlot[mat_?MatrixQ] := Module[{dim = [email protected]@mat, 
    white = [email protected][mat, {__, 0 .., __}], black, left, right, grid}, 

    black = (dim - white)/2; 
    left = black + 1; 
    right = dim - black; 
    grid = white - 2; 

    ArrayPlot[mat, Mesh -> False, Frame -> False, 
    Epilog -> {GrayLevel[0.5], AbsoluteThickness[1], 
    [email protected][{{left + i, right}, {left + i, black}}, {i, 0, grid}], 
     [email protected][{{black, left + i}, {right, left + i}}, {i, 0, grid}]}] 

    ] 
関連する問題