2012-08-03 72 views
1

有没有什么方法可以使用ZedGraph定位图例,以便它位于右侧,但是垂直居中。使用:将ZedGraph传说定位在中间右上角不是右上角?

output.Legend.Position = ZedGraph.LegendPos.Right 

将传说定位在右上角,但在饼图旁边,这看起来没有对齐。有没有办法让图例垂直居中? 更改output.Legend.Location.Y似乎没有任何影响,也不会响应下面第一个答案试图output.Legend.Location.AlignV = ZedGraph.AlignV.Center

加...

浮动,减少图表大小和定位标签呢中心垂直,并且比我好之前已经管理过。不幸的是,它有一个副作用,因为图例切换到多列并尝试占用总图表区域的一半宽度,因此通常会重叠图表(请参见图片)。查看ZedGraph源代码,这个更宽的模式用于除左和右以外的所有布局。

Multi-column legend

回答

2

LocationLegend.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); 
+0

谢谢,很好的答案,虽然有一个副作用,因为图例一旦漂浮就变得很宽 - 所以要么重叠图表,要么图表非常小。我用图片更新了这个问题。我已经接受了这个答案,因为它已经让我得到了我最终的解决方案。 – 2012-08-05 08:43:16

1

安德斯的答案几乎奏效,除了它有改变图例宽度的副作用。这使我下载了源代码以找出原因,并且我发现传说定位代码实际上非常微不足道。 LegendPos.Right仅在代码中引用两次,两次都在Legend.CalcRect 添加新的LegendPos.MiddleRight只需要将其添加到枚举中,MiddleRight添加到与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; 

这是相同的代码作为除了newRect.Y线LegendPos.Right

+0

斯图尔特,伟大的工作!我绝对认为你应该为[Zedgraph项目](http://sourceforge.net/projects/zedgraph/)提供这个补丁,我相信它对其他人也是有用的。 – 2012-08-05 19:26:17