1

有没有办法使用 ZedGraph 定位图例,使其位于右侧,但垂直居中。使用:

output.Legend.Position = ZedGraph.LegendPos.Right

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

为响应下面的第一个答案而添加...

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

多列图例

4

2 回答 2

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);

可能不希望的“特征”是图例部分绘制在图表内:

图表中的图例

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

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

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

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

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

于 2012-08-05T08:51:06.807 回答