2012-08-03 67 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