是否有某种方法可以使用ZedGraph定位图例,使其位于右侧,但是垂直居中。使用:
output.Legend.Position = ZedGraph.LegendPos.Right
将图例放在右上方,但在饼图旁边,这看起来不对齐。有没有办法让传说垂直居中?
更改output.Legend.Location.Y
似乎没有效果,也没有尝试output.Legend.Location.AlignV = ZedGraph.AlignV.Center
在回复下面的第一个答案后添加...
浮动,缩小图表大小和定位标签的确垂直居中,并且比我之前管理的要好。不幸的是它有副作用,因为图例切换到多列并试图占据整个图表区域的一半宽度,因此通常与图表重叠(见图)。查看ZedGraph源代码,此更宽的模式用于除Left和Right之外的所有布局。
答案 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);
带有可能不受欢迎的“特征”,图例部分在图表中绘制:
要解决此问题,我相信您还必须手动调整图表大小:
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
的代码相同。