【发布时间】: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
-
我无法重现该问题,因此必须配置错误。您是从代码创建图表还是将其拖到表单上?如果您将其拖到表单上,请将其删除并添加一个新的。这至少应该将所有设置重置为默认值。也许从那里你可以追查到它。编辑:你的间隔是最大 - 最小?尝试将间隔设置为自动并查看它的作用。