2016-08-10 11 views
0

私は、標準のMSチャートコントロールを使用してスタックライングラフを生成するC#Windowsフォームアプリケーションを以下の例のように持っています。スタックライングラフをスムージング

シリーズやその他のプロパティを書式設定して線をスムージングする方法はありますか? Excelでこれを行うための方法を見つけるように見えることはできませんMSDNとGoogle Iを見てみると

、そこ series.Smoothプロパティ...私はそれを見逃しているか、そうではない可能です

+1

'SplineArea'チャートタイプを試してください。 – jsanalytics

+0

尖ったエッジを取り除きたい場合は、データポイントと所有者を計算することができます。曲線と線で構成された塗りつぶし塗りとして領域を描画します。 [Here](http://stackoverflow.com/questions/38175238/stackedbar-borders-between-different-series/38261691?s=1|0.3676#38261691)は積み上げ座標を計算する例です。 – TaW

+0

@jstreet、残念なことにこれは積み重ねられたグラフではありませんが、結果は素晴らしいものでした。提案に感謝します。 – Adrian

答えて

1

あなたがSplineAreasの円滑な外観を好きなら、あなたはちょうどそれを見得るために必要な値を計算することができます

enter image description here

いくつかの注意事項:

  • Iをシリーズの順序を逆転させた。色権利を取得するには多くの方法...(その代わり1は、おそらく逆に蓄積する必要があります)
  • いつものように、を整列すると、空のあらゆるDataPointsが自分Y-Values0する必要があります積み重ねDataPoints必要。
  • 新しいシリーズではもちろん、実際のデータ値にアクセスすることはできません。少なくともキャリブレーションを元に戻すことはできません。だから、もし彼らがどこかでそれらを保つ必要があるなら。新しいDataPoints' Tagプロパティは、あなたがそのLineTensionカスタム属性を設定することにより、各Seriesの「滑らかさ」を制御することができます一つの選択肢...
  • である:ここでは

chart2.Series[0].SetCustomProperty("LineTension", "0.15"); 

enter image description here はその完全なサンプルコードです上記のスクリーンショットを作成して、StackedArea chart1のデータから「積み重ねた」SplineArea chart2を計算します。

// preparation 
for (int i = 0; i < 4; i++) 
{ 
    Series s = chart1.Series.Add("S" + i); 
    s.ChartType = SeriesChartType.StackedArea; 

    Series s2 = chart2.Series.Add("S" + i); 
    s2.ChartType = SeriesChartType.SplineArea; 

} 

for (int i = 0; i < 30; i++) // some test data 
{ 
    chart1.Series[0].Points.AddXY(i, Math.Abs(Math.Sin(i/8f))); 
    chart1.Series[1].Points.AddXY(i, Math.Abs(Math.Sin(i/4f))); 
    chart1.Series[2].Points.AddXY(i, Math.Abs(Math.Sin(i/1f))); 
    chart1.Series[3].Points.AddXY(i, Math.Abs(Math.Sin(i/0.5f))); 
} 

// the actual calculations: 

int sCount = chart1.Series.Count; 
for (int i = 0; i < chart1.Series[0].Points.Count ; i++) 
{ 
    double v = chart1.Series[0].Points[i].YValues[0]; 
    chart2.Series[sCount - 1].Points.AddXY(i, v); 
    for (int j = 1; j < sCount; j++) 
    { 
     v += chart1.Series[j].Points[i].YValues[0]; 
     chart2.Series[sCount - j - 1].Points.AddXY(i, v); 
    } 
} 

// optionally control the tension: 
chart2.Series[0].SetCustomProperty("LineTension", "0.15"); 
関連する問題