15

現在、.NET内で。を使用してグラフを使用していますSystem.Windows.Forms.DataVisualization.Charting.Chart。これまでのところ、それは非常に強力に見え、うまく機能します。ただし、間隔の自動計算方法に関しては大きな問題があります。私は多くのdouble値を使用しますが、ZedGraphのようなライブラリでは、これを完全に処理します。最小/最大/間隔を適切に選択します。ただし、MSチャートでは、最小値として206.3334539832を選択し、同様の小数精度の間隔を選択する場合があります。明らかに、これはかなり醜いように見えます。

だから、私は単に軸フォーマットを作ってみました、{0.00}そしてそれがチャートをロードするときそれはうまくいきます。ズームインする場合を除いて、精度を上げる必要があります。小数点以下2桁ではなく小数点以下4桁である可能性があります。常に小数点以下9桁で止まっているようです。そうでない場合は、一定の固定数で、誰かがより高い精度を要求すると壊れることがあります。むしろ、現在適用されているズームのレベルに基づいて精度を上げたいと思います。ZedGraphやDundas(MSも使用していると思います!)のようなライブラリは、ズームインおよびズームアウトすると変化する適切な値を選択する傾向があります。

ズームフレームの変更に応じて間隔の精度を変更する方法はありますか?これはおそらく私が間違って設定したいくつかの単純なプロパティですが、これが何百万ものプロパティを持っていることを区別するのは難しいです(特に間隔の概念を表す約14の場所がある場合)。

4

7 に答える 7

6

ズーム時にまったく同じ問題が発生しました。軸ラベルをフォーマットし、それを Paint ハンドラーから呼び出すコードを追加しました。Axis View オブジェクトには IsZoomed プロパティがあり、現在の軸の制限を取得する関数 (GetViewMinimum/Maximum) があります。Max-Min=range が 1 未満でない限り、すべてのケースで Axis LabelStyle.Format を "N" に設定します。次に、フォーマットを "F#" に設定します。ここで、# は軸の範囲に基づいて計算されます。

# = Convert.ToInt32(Math.Abs(Math.Log10(range) - .5)) + 1;
于 2011-04-12T21:51:14.183 に答える
1

数値書式文字列を変更してみませんか。

フォーマット文字列を作成

string formatString = "{0.00";

ズーム レベルを特定します。たとえば、zoomLevel = 2;

formatString = formatString.PadRight(5+zoomLevel, '0');
formatString += "}";

軸の凡例でこの形式を使用します。フォーマット文字列を変更するには、文字列ビルダーまたはより良い方法を使用してください。

于 2010-12-21T07:17:43.130 に答える
1

チャート コントロールをいじってみましたが、問題の簡単な解決策を見つけることができませんでした。ただし、以下が役立つ場合があります。

軸の最大値と最小値を自分で設定することを検討しましたか? 実際の最大値と最小値を最も近い実用的な「丸め」数 (5、10、0.5、0.01) に丸めると、計算された間隔がもう少しわかりやすくなります。

これが理想的な解決策ではないことは理解していますが、最大値および/または最小値を慎重に選択することで、間隔が「より適切な」数値になるようにすることができます。軸の範囲が 2、5、および 10 で割り切れる場合、かなり適切な間隔になるはずです。

于 2010-12-09T10:04:58.273 に答える
0

データセットに基づいて最大値と最小値を動的に更新できます。ユーザーがズームインするたびに、すべてのポイントでFOREACHを実行し、統計を取得し、それに基づいて最大値と最小値を設定します

于 2011-03-23T18:28:18.103 に答える
0

添付してイベントをカスタマイズできます。そこから、x軸のラベルを変更できます。

var xAxisLabels = chart1.ChartAreas[0].AxisX.CustomLabels;
...
xAxisLabels[0].Text = ...

最小設定 と最大。値:

 chart1.ChartAreas[0].AxisX.Maximum = ...;

于 2011-01-25T10:22:07.270 に答える
0

最小限のコストで結果を提供するには、指数科学形式を使用できます

于 2010-12-09T21:54:06.330 に答える
0

軸の IntervalOffset を設定すると役立ちます。ここに例を示します。

Private Sub chMap_AxisViewChanged(sender As System.Object, e As System.Windows.Forms.DataVisualization.Charting.ViewEventArgs) Handles chMap.AxisViewChanged
  'the grid ticks are rounded values
  e.Axis.IntervalOffset = -e.Axis.ScaleView.ViewMinimum
End Sub
于 2012-02-16T01:13:16.357 に答える