1

ZedGraph を使用して凡例を右側に配置する方法はありますか? 使用:

output.Legend.Position = ZedGraph.LegendPos.Right

凡例を右上に配置しますが、円グラフの横では、これはずれて見えます。凡例を垂直方向の中央に配置する方法はありますか? 変更output.Legend.Location.Yしても効果がないように思われ、変更しようとしても効果がありませんoutput.Legend.Location.AlignV = ZedGraph.AlignV.Center

以下の最初の回答に応じて追加されました...

フローティング、チャート サイズの縮小、およびラベルの配置は垂直方向の中央に配置され、以前に管理していたよりも優れています。残念ながら、凡例が複数列に切り替わり、チャート領域全体の半分の幅を占有しようとするため、通常はチャートと重なってしまうという副作用があります (図を参照)。ZedGraph ソースを見ると、このより広いモードは、Left と Right を除くすべてのレイアウトに使用されています。

複数列の凡例

4

2 に答える 2

3

LocationLegend.Positionが に設定されている場合にのみ有効になりFloatます。

次のようにすることができます (C#):

output.Legend.Position = LegendPos.Float;
output.Legend.Location = 
   new Location(1.05f, 0.5f, CoordType.ChartFraction, AlignH.Right, AlignV.Center);

凡例がチャート内に部分的に描画されるというおそらく望ましくない「機能」を使用します。

チャートの凡例

この問題を回避するには、チャートのサイズを手動で変更する必要があると思います。

output.Chart.Rect = new RectangleF(xstart, ystart, xsize, ysize);
于 2012-08-04T21:04:10.993 に答える
1

凡例の幅を変更するという副作用があったことを除いて、アンダースの答えはほとんどうまくいきました。このため、ソース コードをダウンロードしてその理由を調べてみたところ、凡例の配置コードが実際には非常に些細なことであることがわかりました。 LegendPos.Rightはコード内で 2 回だけ参照されます。Legend.CalcRect 新しいものを追加するときは両方ともLegendPos.MiddleRight、列挙型に追加するだけで済みMiddleRightますRight。そして、次の 2 番目のスイッチでCalcRectは:

    case LegendPos.MiddleRight:
        newRect.X = clientRect.Right - totLegWidth;
        newRect.Y = tChartRect.Top + tChartRect.Height / 2 - totLegHeight / 2;
        tChartRect.Width -= totLegWidth + gapPix;
        break;

LegendPos.RightnewRect.Y 行以外は forと同じコードです。

于 2012-08-05T08:51:06.807 に答える