将ZedGraph传奇定位在中间右侧不是右上角?

时间:2012-08-03 17:37:50

标签: graph zedgraph

是否有某种方法可以使用ZedGraph定位图例,使其位于右侧,但是垂直居中。使用:

output.Legend.Position = ZedGraph.LegendPos.Right

将图例放在右上方,但在饼图旁边,这看起来不对齐。有没有办法让传说垂直居中? 更改output.Legend.Location.Y似乎没有效果,也没有尝试output.Legend.Location.AlignV = ZedGraph.AlignV.Center

在回复下面的第一个答案后添加...

浮动,缩小图表大小和定位标签的确垂直居中,并且比我之前管理的要好。不幸的是它有副作用,因为图例切换到多列并试图占据整个图表区域的一半宽度,因此通常与图表重叠(见图)。查看ZedGraph源代码,此更宽的模式用于除Left和Right之外的所有布局。

Multi-column legend

2 个答案:

答案 0 :(得分:3)

Location仅在Legend.Position设置为Float时启用。

你可以这样做(C#):

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

带有可能不受欢迎的“特征”,图例部分在图表中绘制:

Legend in chart

要解决此问题,我相信您还必须手动调整图表大小:

output.Chart.Rect = new RectangleF(xstart, ystart, xsize, ysize);

答案 1 :(得分:1)

安德斯的回答几乎有效,除了它有改变传奇宽度的副作用。这导致我下载源代码以找出原因,并且我发现图例定位代码实际上非常简单。 LegendPos.Right只在代码中引用了两次Legend.CalcRect 添加新的LegendPos.MiddleRight只需要将其添加到枚举中,MiddleRight的情况添加到第一个Switch,其运行与Right相同的代码。在CalcRect中的第二个Switch中:

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

除了newRect.Y行之外,这与LegendPos.Right的代码相同。