【问题标题】:MsChart Axis X Minimum value being overridden to a lower valueMsChart Axis X 最小值被覆盖为较低的值
【发布时间】:2016-05-14 02:50:53
【问题描述】:

我一直在尝试解决这个问题。症状是 X 轴,我看到该值被我在 Chart1.ChartAreas(0).AxisX.Minimum = Xmin (在这种情况下为 8.5) 中设置的值覆盖为较低的值。但是,当我将值乘以 100 时,曲线似乎以最小值和最大值为中心。我也根本没有在 Y 轴上体验到这一点。在所附图片中,我将最小值设置为 8.5(如图中曲线开始的位置。我还注意到,如果我将最小值设置为 8 以下,它会让我将其设置为该值。所以这让我相信有一些一种值,它的压倒性比率使 MSchart 内部的最小值。

Imports Microsoft.VisualBasic

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.IO



Imports System.Drawing






Public Class Test
    Inherits System.Web.UI.Page



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load


        Dim value As Double
        Dim xxmax As Double
        Dim yymax As Double
        Dim xxmin As Double
        Dim yymin As Double
        Dim XPlot As New ArrayList
        Dim YPlot As New ArrayList


        XPlot.Add(10.1)
        XPlot.Add(10.15)
        XPlot.Add(10.2)
        XPlot.Add(10.25)
        XPlot.Add(10.3)

        YPlot.Add(1)
        YPlot.Add(2)
        YPlot.Add(3)
        YPlot.Add(4)
        YPlot.Add(5)




        xxmin = 10.1
        xxmax = 10.3
        yymin = 1
        yymax = 5




        Chart1.Series.Clear()
        Chart1.Series.Add("Polfit Fit")
        Chart1.Series("Polfit Fit").XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32
        Chart1.Series("Polfit Fit").ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line

        Chart1.Series.Add("Plotted Data")
        Chart1.Series("Plotted Data").XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32
        Chart1.Series("Plotted Data").ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Point
        Chart1.Series("Plotted Data").MarkerStyle = System.Web.UI.DataVisualization.Charting.MarkerStyle.Circle
        Chart1.Series("Plotted Data").MarkerSize = 10
        Chart1.Series("Plotted Data").MarkerColor = Color.Green
        Chart1.Series("Polfit Fit").Color = Color.Blue
        Dim mylegend As New System.Web.UI.DataVisualization.Charting.Legend
        mylegend.Font = New System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Bold)
        mylegend.Name = "Legend"
        mylegend.BorderWidth = 4
        mylegend.BorderColor = Color.Black
        mylegend.Docking = DataVisualization.Charting.Docking.Right
        Chart1.Legends.Add(mylegend)
        Chart1.ChartAreas(0).AxisX.Title = Value
        Chart1.ChartAreas(0).AxisX.TitleFont = New System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Bold)
        Chart1.ChartAreas(0).AxisY.TitleFont = New System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Bold)
        Chart1.ChartAreas(0).AxisY.Title = "Margin Of Safety"
        Chart1.ChartAreas(0).AxisX.IsMarginVisible = True
        Chart1.ChartAreas(0).AxisY.IsMarginVisible = True

        Chart1.ChartAreas(0).AxisY.IsStartedFromZero = False
        Chart1.ChartAreas(0).AxisX.IsStartedFromZero = False

        Chart1.ChartAreas(0).AxisX.Interval = 0.05
        Chart1.ChartAreas(0).AxisY.Interval = 0.05
        Chart1.ChartAreas(0).AxisX.Maximum = Math.Round((xxmax + Math.Abs(xxmax * 0.0)), 6)
        Chart1.ChartAreas(0).AxisX.Minimum = Math.Round((xxmin - Math.Abs(xxmax * 0.0)), 6)
        Chart1.ChartAreas(0).AxisY.Maximum = Math.Round((yymax + Math.Abs(yymax * 0.0)), 6)
        Chart1.ChartAreas(0).AxisY.Minimum = Math.Round((yymin - Math.Abs(yymin * 0.0)), 6)
        Chart1.Height = 600
        Chart1.Width = 1500
        Dim j
        Dim b

        While j < XPlot.Count
            If Not YPlot(j) = "0" And Not (CDbl(XPlot(j)) / CDbl(YPlot(j)) = 1) Then
                Dim point As New System.Web.UI.DataVisualization.Charting.DataPoint

                point.SetValueXY((XPlot(j)), (YPlot(j)))
                Chart1.Series("Plotted Data").Points.Add(point)

            End If
            j += 1
        End While
        b = 0


    End Sub





End Class


<%@ Page Language="VB"        Inherits ="Test"    CodeFile ="Test.vb"  %>

<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">






<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>


<form     runat="server"  > 


<asp:Chart ID="Chart1" runat="server">
    <Series>
        <asp:Series Name="Series1">
        </asp:Series>
    </Series>
    <ChartAreas>
        <asp:ChartArea Name="ChartArea1">
        </asp:ChartArea>
    </ChartAreas>
</asp:Chart>




 </form>


    </body>
</html>

【问题讨论】:

  • 您是如何将积分添加到图表中的?您是否为 x 轴设置了间隔类型?很多时候,当您的点类型与您的轴类型不匹配时,可能会发生这种情况。还要检查series.IsXValueIndexed = true;,如果为真,您可能需要将其设置为假。由于您没有提供任何代码,因此很难确定问题出在哪里,据我们所知,您的代码中某处可能会将 x 最小值从 8.5 重置为较低的值。
  • 您可以检查的另一件事是chart1.ChartAreas[0].AxisX.IsStartedFromZero = false;
  • 每个轴的间隔是我绘制的点和曲线点的(最大值-最小值)。是的,我正在做 chart1.ChartAreas()AxisX.IsStartedFromZero = false (这并不重要,因为您看到图表中的最小值已经是 8)。 series("Series Title").IsXValueIndexed = False 也不能解决问题。不,我也没有将其设置为较低的值。我确保检查对象管理器以查看我将图表 x 轴最小值设置为 8.5。
  • Point is Dim point As New System.Web.UI.DataVisualization.Charting.DataPoint
  • 我无法重现该问题,因此必须配置错误。您是从代码创建图表还是将其拖到表单上?如果您将其拖到表单上,请将其删除并添加一个新的。这至少应该将所有设置重置为默认值。也许从那里你可以追查到它。编辑:你的间隔是最大 - 最小?尝试将间隔设置为自动并查看它的作用。

标签: asp.net vb.net mschart


【解决方案1】:

Chart1.Series("绘制的数据").XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32

应该是

Chart1.Series("绘制的数据").XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Double

这就是导致问题的原因。谢谢 Babback 解决了这个问题。

【讨论】:

  • 很高兴你知道了。在过去的几天里,它让我陷入了困境。这些事情通常与与您传递的数据不匹配的值类型有关。干得好!
猜你喜欢
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2016-12-27
  • 2013-09-02
  • 1970-01-01
  • 2013-01-05
相关资源
最近更新 更多