Установка масштаба осей диаграммы asp.net на логарифмический
Я пытаюсь создать диаграмму, которая имеет логарифмическую шкалу с основанием 10 для обеих осей X и Y. Я продолжаю получать исключение ниже, когда, я полагаю, график связан.
Исключение типа "System.InvalidOperationException" произошло в System.Web.DataVisualization.dll, но не было обработано в коде пользователя
Оси области диаграммы - для этой оси нельзя использовать логарифмическую шкалу.
StackTrace: в System.Web.UI.DataVisualization.Charting.ChartArea.SetDefaultFromIndexesOrData(ось оси, AxisType axisType) в System.Web.UI.DataVisualization.Charting.ChartArea.SetDefaultAxI.ChartArea.SetData(Boolean initializeAxes, Boolean checkIndexedAligned) в System.Web.UI.DataVisualization.Charting.ChartArea.ReCalcInternal() в System.Web.UI.DataVisualization.Charting.ChartPicture.Plele для графического представления, графического объекта BooleOpp (графическое графическое представление, графический объект Web.UI.DataVisualization.Charting.ChartImage.GetImage (одиночное разрешение) в System.Web.UI.DataVisualization.Charting.Chart.SaveImage (Stream imageStream) в System.Web.UI.DataVisualization.Charting.Chart.Render (HtmlTerxterer) в System.Web.UI.Control.RenderControlInternal (модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (модуль записи HtmlTextWriter, адаптер ControlAdapter) в системном модуле System.Web.UI.Control.RenderControl (Html). System.Web.U I.Control.RenderChildrenInternal (писатель HtmlTextWriter, потомки ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.Control.Render (писатель HtmlTextWriter) в System.Wternal.CI. (Модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (модуль записи HtmlTextWriter) в файле System.Web.UIternalChtr. писатель, дети ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.UpdatePanel.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.Control.Render (HtmlTerxtWriter). Web.UI.UpdatePanel.Render (модуль записи HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (адаптер HtmlTextWriter в системном администраторе), элемент управления. UI.Control.RenderControl (HtmlTe писатель xtWriter) в System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter, дети ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.WebControls.WebTert в System.Web.UI.WebControls.WebControl.Render (модуль записи HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (модуль записи HtmlTextWriter, адаптер ControlAdapter) в элементе управления System.Web.UI.Control.RenderControl (Controller Writer), Hartmler в System.Web.UI.Control.RenderControl (писатель HtmlTextWriter) в System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter, дети ICollection) в System.Web.UI.Control.RenderChildren (HtmlTextWritWear). UI.Control.Render (модуль записи HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (модуль записи HtmlTextWriter, адаптер ControlAdapter в адаптере ControlAdapter). Control.RenderControl (HtmlTex писатель tWriter) в System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter, дочерние элементы ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в писатель System.Web.UI.Control.Render (HtmlTerter).Web.UI.Control.RenderControlInternal (модуль записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (модуль HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl_ritt_t_trol_server.__RenderPanel_Tables(HtmlTextWriter __w, Control parameterContainer) в C: (и так далее........)
Вот код для диаграммы в интерфейсе:
<asp:Chart ID="VoltageVsCurrent" runat="server" BackColor="AliceBlue" ImageLocation="~/Images/TempImages/ChartPic_#SEQ(300,3)" Width="600px" Height="400px">
<Series>
<asp:Series Name="Series1" ChartType="Point" LegendText="Current (A)" />
<asp:Series Name="Series2" ChartType="Spline" LegendText="Spline" BorderWidth="2" />
</Series>
<Legends>
<asp:Legend DockedToChartArea="ChartArea1" Alignment="Center" />
</Legends>
<ChartAreas>
<asp:ChartArea Name="ChartArea1">
<AxisX Title="Voltage (Volts)" TitleFont="Segoe UI, 12pt, style=Italic">
<MajorGrid Enabled="false" />
<MajorTickMark Enabled="true" />
</AxisX>
<AxisY Title="Current (Amps)" TitleFont="Segoe UI, 12pt, style=Italic" />
</asp:ChartArea>
</ChartAreas>
<Titles>
<asp:Title Text="Current vs Voltage" Font="Segoe UI, 16pt, style=Bold, Underline" />
</Titles>
</asp:Chart>
И код, который устанавливает диаграмму на заднем плане:
VoltageVsCurrent.DataSource = ChartDataSource
VoltageVsCurrent.Series("Series1").XValueMember = VoltageColumn
VoltageVsCurrent.Series("Series1").YValueMembers = CurrentColumn
VoltageVsCurrent.Series("Series2").YValueMembers = CurrentColumn
VoltageVsCurrent.ChartAreas("ChartArea1").AxisX.IsLogarithmic = True
VoltageVsCurrent.ChartAreas("ChartArea1").AxisY.IsLogarithmic = True
VoltageVsCurrent.ChartAreas("ChartArea1").AxisX.IsStartedFromZero = False
VoltageVsCurrent.ChartAreas("ChartArea1").AxisY.IsStartedFromZero = False
VoltageVsCurrent.Series("Series1").IsXValueIndexed = False
VoltageVsCurrent.Series("Series2").IsXValueIndexed = False
VoltageVsCurrent.SuppressExceptions = True
VoltageVsCurrent.DataBind()
Я добавил IsStartedFromZero = False
, IsXValueIndexed = False
, а также SuppressExceptions = True
из-за предложений, которые я нашел в другом месте при исследовании этой проблемы. Кажется, никто из них не помог.
Я проверил это перед DataBind()
ChartDataSource
в нем были реальные значения, ни одно из которых не было равно нулю или отрицательно. Пример ChartDataSource. (Я знаю, что это не логарифмические данные, но они все равно должны составлять график)
Любая помощь высоко ценится! Спасибо!
1 ответ
Одна вещь, на которую следует обратить внимание, это то, что нельзя принять логарифм 0 (так же, как нельзя делить на ноль). Поэтому, если у вас есть какие-либо точки в ваших данных, которые имеют значение X или Y, равное нулю или менее, вы не сможете использовать логарифмическое масштабирование.
Возможно, попробуйте исключить любые точки, где X <= 0 или Y <= 0.