Eu tenho um gráfico WinForms no qual tenho leituras de temperatura chegando e exibindo a cada segundo. Gosto da maneira como o gráfico funciona automaticamente, manipulando a exibição dos valores, mas quero mudar uma coisa simples .
Quero aumentar o intervalo mínimo do eixo y exibido, para que ele exiba um intervalo de 20. No momento, ele exibe apenas cerca de 5. Eu tentei algumas coisas:
//(when new data arrives...)
//Does not work, I think because by default, Size is always NaN?
if (chart1.ChartAreas[0].AxisY.ScaleView.Size < 20)
{
chart1.ChartAreas[0].AxisY.ScaleView.Size = 20;
}
Nenhum desses funciona:
chart1.ChartAreas[0].AxisY.ScaleView.SmallScrollMinSize = 20;
chart1.ChartAreas[0].AxisY.ScaleView.SmallScrollSize = 20;
chart1.ChartAreas[0].AxisY.ScaleView.MinSize = 20;
chart1.ChartAreas[0].AxisY.Minimum //doesn't seem to have any effect
chart1.ChartAreas[0].AxisY.Maximum //doesn't seem to have any effect
Tenho certeza de que perdi algo simples. Eu espero que sim.
O 'intervalo mínimo de exibição' não é algo embutido no controle do MSChart.
Mas você pode facilmente fingir:
Adicione um manequim Series
que contenha apenas dois pontos para garantir que o intervalo de exibição não fique abaixo do intervalo de seus valores y ..:
int rangeMin = -10;
int rangeMax = 20;
sDummy = chart.Series.Add("dummy");
sDummy.Color = Color.Transparent;
sDummy.IsVisibleInLegend = false;
sDummy.ChartType = SeriesChartType.Point;
sDummy.Points.AddXY(0, rangeMin + 1);
sDummy.Points.AddXY(0, rangeMax - 1);
Defina o estilo do eixo y como desejar:
Axis ay = chart.ChartAreas[0].AxisY;
ay.MajorGrid.Interval = 5;
E adicione um ou mais dados Series
:
sData = chart.Series.Add("data");
sData.LegendText = "Temperature";
sData.ChartType = SeriesChartType.Line;
Agora, à medida que você adiciona pontos de dados com um intervalo maior de valores, o eixo y aumentará seu intervalo de exibição para acomodá-los. E se você remover os pontos maiores, ele encolherá , mas não abaixo do intervalo necessário para a série fictícia.:
Observe que, como o Chart
adiciona automaticamente alguma folga, eu reduzo o intervalo em ambos os lados em 1
; com outros, Intervals
etc., são necessários outros números.
O código para remover os valores maiores, aliás:
var toRemove = sData.Points.Cast<DataPoint>()
.Where(x => x.YValues[0] >= rangeMax).ToList();
foreach (var dp in toRemove) sData.Points.Remove(dp);
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras