0
我有一個c#Windows窗體應用程序,它使用標準的MS Chart控件生成一個堆積折線圖,如下例所示。平滑堆積折線圖
有沒有通過格式化系列或其他屬性來「平滑」行的方法?
看MSDN和谷歌我似乎無法找到一個方法來做到這一點,在Excel中有一個series.Smooth
屬性...
我有我錯過了或者是沒可能?
我有一個c#Windows窗體應用程序,它使用標準的MS Chart控件生成一個堆積折線圖,如下例所示。平滑堆積折線圖
有沒有通過格式化系列或其他屬性來「平滑」行的方法?
看MSDN和谷歌我似乎無法找到一個方法來做到這一點,在Excel中有一個series.Smooth
屬性...
我有我錯過了或者是沒可能?
如果你喜歡SplineAreas
的平滑外觀,你可以計算出必要的值得到的只是那樣子:
的幾個注意事項:
DataPoints
需要被對準,像往常一樣和任何空DataPoints
應該有自己Y-Values
是0
。DataPoints' Tag
屬性是一個選項..LineTension
自定義屬性控制每個Series
的「平滑度」:chart2.Series[0].SetCustomProperty("LineTension", "0.15");
以下是完整的示例代碼創建以上屏幕截圖計算'堆疊'SplineArea chart2
來自數據中的數據StackedArea chart1
:
// 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");
嘗試'SplineArea'圖表類型。 – jsanalytics
如果您想擺脫尖角的邊緣,您可以計算數據點並將所有者繪製爲由曲線和線組成的填充曲線。 [Here](http://stackoverflow.com/questions/38175238/stackedbar-borders-between-different-series/38261691?s=1|0.3676#38261691)是計算堆積座標的一個例子.. – TaW
@jstreet,不幸的是,這不是一個堆積圖,否則它會很棒,但結果看起來很有趣!感謝您的建議。 – Adrian