对齐多个图表区域

时间:2014-03-11 07:23:52

标签: vb.net charts mschart

我想在InnerPlotPosition上找到几个图表。

正如您在图1中所示,当我尝试用InnerPlotPosition定位时,当我尝试自己绘制图表区域并关闭自动位置时,我无法使Y轴对齐。图2是所需的输出

见代码。

     '.ChartAreas("chr" + type).InnerPlotPosition.Auto = False
        ' .ChartAreas("chr" + type).InnerPlotPosition.Width = 80
        '.ChartAreas("chr" + type).InnerPlotPosition.Height = 90
  

图片1

enter image description here

  

图2

enter image description here

2 个答案:

答案 0 :(得分:1)

图表中元素的绝对定位是你所知道的皇家痛苦。您需要注意以下

  • 文本元素不是图表区域边界的一部分。因此,您需要为轴标题和数字计划额外的空间。
  • 所有值均为当前图表大小的百分比值。因此,如果您的图表宽度为200px,并且将.Left属性设置为50,则意味着位置100.如果您想使图表变得相当大,那将非常令人沮丧。

要将百分比值转换为绝对值,您需要进行一些计算。例如,您希望在图表区域周围有一个恒定的边框(以像素为单位),您可以执行以下操作:

首先设置定义每边边框大小的变量值(以像素为单位):

Dim ChartBorderLeft as Integer = 100 'Pixels on the left
Dim ChartBorderRight as Integer = 100 'Pixels on the right
Dim ChartBorderTop as Integer = 100 'Pixels on the top
Dim ChartBorderBottom as Integer = 100 'Pixels on the bottom

然后根据当前图表大小和边界变量调整定义代码中InnerPlotPosition的位置和大小的百分比。

 chart.ChartAreas(0).InnerPlotPosition.X = CSng(ChartBorderLeft / chart.Width) * 100 'Left border
 chart.ChartAreas(0).InnerPlotPosition.Y = CSng(ChartBorderTop / chart.Height) * 100 'Top Border
 chart.ChartAreas(0).InnerPlotPosition.Width = CSng((chart.Width - ChartBorderLeft - ChartBorderRight) / chart.Width) * 100
 chart.ChartAreas(0).InnerPlotPosition.Height = CSng((chart.Height - ChartBorderTop - ChartBorderBottom) / chart.Height) * 100

chart是您要修改的图表对象。该代码仅考虑图表中的单个图表区域。我放弃了拥有多个图表区域的想法,而是使用了我需要的多个图表。 ChartBorderLeftChartBorderRight等是每边的边框(以像素为单位)。轴的位置是InnerPlotPosition的边界,因此如果之后边界大小相同,它会很好地排列。
对于标题和数字,您应该计划大约100px边框。您还可以将代码放在图表的resize事件处理程序中,以便在图表大小更改时调整绘图位置。

答案 1 :(得分:1)

chart1.ChartAreas [a] .AlignWithChartArea = chart1.ChartAreas [a - 1] .Name;