- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够从文件夹中获取 .csv
文件并将它们绘制在图表中。
目前,我只是保存文件并像这样显示一条单独的曲线:
运行测试函数:
public List<Tuple<double,double>> runTest()
{
_dpg = new Root(this, "english", false);
_dpg.Init();
var filename = "Dpg10Export_" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".csv";
List<Tuple<double, double>> results = new List<Tuple<double, double>>();
var measurement = new Measurement();
var resultCode = RunMeasurement(60, 1000, 2200, ref measurement, null /* TODO: ref ProgressBar? */);
using (var fileStream = new StreamWriter(filename))
{
var count = measurement.I_inc_Values.Count;
for (var i = 0; i < count; i++)
{
var item = measurement.I_inc_Values[i + 1];
var current = (float)Convert.ToDouble(item);
item = measurement.LI_inc_Values[i + 1];
var inductance = (float)Convert.ToDouble(item);
var line = current.ToString() + ";" + inductance.ToString() + ";";
fileStream.WriteLine(line);
currentList.Add(current);
inductanceList.Add(inductance);
results.Add(new Tuple<double, double>(current,inductance));
if (i == 0 || (i + 1) % 32 == 0)
{
Console.WriteLine((i + 1) + ": " + line);
}
}
}
return results;
}
此代码会生成一个如下所示的 csv 文件:
0,22 | 0,44
0,32 | 0,54
0,44 | 0,65
这些值会产生一条如下所示的曲线:
当您点击“获取波形”按钮时,就会生成上面的曲线。但是,我想显示所有已生成的曲线,以及一个趋势线。我将如何实现这一点?
void BindData(List<Tuple<double,double>> results)
{
chart.Series.Clear();
var series1 = new System.Windows.Forms.DataVisualization.Charting.Series
{
Name = "curr/induc",
Color = System.Drawing.Color.Green,
IsVisibleInLegend = true,
IsXValueIndexed = true,
ChartType = SeriesChartType.Line
};
foreach (var i in results)
{
series1.Points.AddXY(i.Item2,i.Item1);
}
chart.Invalidate();
chart.Series.Add(series1);
}
private void getWaveformBtn_Click(object sender, EventArgs e)
{
Dpg10Client.Dpg10Settings settings = new Dpg10Client.Dpg10Settings();
Dpg10Instrument hej = new Dpg10Instrument(settings);
List<Tuple<double,double>> results = hej.runTest();
double current, inductance;
foreach(var i in results)
{
current = i.Item1;
inductance = i.Item2;
textBoxWaveformInput.Text += current.ToString() + inductance.ToString();
}
BindData(results);
}
长话短说
解析 CSV
文件中的信息以生成曲线,并根据这些文件创建趋势线。
标记为重复:该答案是关于直线的,这些值可以在曲线中波动。
最佳答案
有很多方法可以解决您问题中的大部分问题。
让我只处理实际上与计算多个系列的平均值有关的部分,即不会处理使用 CSV 文件中的数据创建系列。
有一个内置类可以进行各种高级数学运算,包括 financial和 statistical ,但我没有找到有助于在多个系列上创建平均线/曲线的工具。
所以让我们自己做..
第一个问题是,要计算平均值,我们不仅需要数据,还需要数据,即它们的 x 值,必须分组到“bins”中我们想得到平均值。
除非数据已经像那样分组,例如因为它们每天每个系列都有一个值,所以我们需要创建这样的组。
让我们首先收集我们要处理的所有系列的所有点;您可能需要调整循环以仅包含您的系列集..:
var allPoints = new List <DataPoint>();
for (int s = 0; s < 3; s++) // I know I have created these three series
{
Series ser = chartGraphic.Series["S" + (s+1)];
allPoints.AddRange(ser.Points);
}
接下来我们需要确定一个 bin 范围/大小,这是一个确定哪些 x 值应属于同一 bin/组的值。我选择了 10 个箱子。
所以我们最好得到 x 值的总范围,然后除以我们想要的 bin 数..:
double xmax = allPoints.Max(x => x.XValue);
double xmin = allPoints.Min(x => x.XValue);
int bins = 10;
double groupSize = (xmax - xmin) / (bins - 1);
接下来我们进行实际的计算;为此,我们排序我们的点,分组它们并为每个分组集选择平均值..:
var grouped = allPoints
.OrderBy(x => x.XValue)
.GroupBy(x => groupSize * (int)(x.XValue /groupSize ))
.Select(x => new { xval = x.Key, yavg = x.Average(y => y.YValues[0]) })
.ToList();
现在我们可以将它们添加到一个新系列中以显示 bin 中的平均值:
foreach (var kv in grouped) avgSeries.Points.AddXY(kv.xval + groupSize/2f, kv.yavg);
我将平均点置于 bin 的中心。
这是一个例子:
关于这个例子的几点说明:
平均线没有显示真正的“趋势”,因为我的数据几乎是随机的。
我已将标记
添加到所有系列,使DataPoints
从线条中脱颖而出。这是我为平均值系列所做的:
avgSeries.MarkerStyle = MarkerStyle.Cross;
avgSeries.MarkerSize = 7;
avgSeries.BorderWidth = 2;
我添加了一个 StripLine
来显示 bin。方法如下:
StripLine sl = new StripLine();
sl.BackColor = Color.FromArgb(44,155,155,222);
sl.StripWidth = groupSize;
sl.Interval = groupSize * 2;
sl.IntervalOffset = chartGraphic.ChartAreas[0].AxisX.IntervalOffset;
chartGraphic.ChartAreas[0].AxisX.StripLines.Add(sl);
我还设置了一个点,使其具有非常低的 -300
值,以演示这将如何降低其 bin 中的平均值。为了使图表仍然很好地以正常数据范围为中心,我在 y 轴上添加了一个 ScaleBreakStyle
:
chartGraphic.ChartAreas[0].AxisY.ScaleBreakStyle.BreakLineStyle = BreakLineStyle.Wave;
chartGraphic.ChartAreas[0].AxisY.ScaleBreakStyle.Enabled = true;
关于c# - 从图表中的文件生成趋势线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261839/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 4 年前。 Improve
我有一个名为 LOGENTRY 的简单表,其中包含名为“DATE”和“COST”的字段。示例: +--------------+-------+ | DATE | COST | +-
我有一个每小时运行一次的 cron 作业。 cron 作业向表 'update' 添加一条记录 table - 'update' update_id (primary) timestamp 和 将我网
我正在使用 Bokeh 制作趋势图,显示概念的流行程度如何随时间变化。我使用了 brewer 示例 ( https://docs.bokeh.org/en/latest/docs/gallery/st
所以我想做的是制作一个趋势算法,我需要有关 SQL 代码的帮助,因为我无法让它运行。 该算法包含三个方面:(我对更好的趋势算法的想法完全开放) 1.Plays during 24h / Total p
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
开发 Twitter Connect 应用程序并通过 URL 获取趋势: https://api.twitter.com/1.1/trends/closest.json?lat=42&long=36
我对时间序列异常检测非常陌生,所以我的问题对你们中的一些人来说可能是显而易见的。今天,我使用 lstm 和聚类技术来检测时间序列上的异常,但这些方法无法识别随着时间的推移慢慢恶化的异常(我认为这称为趋
我正在寻求[博客]的帮助:http://www.androidhive.info/2012/01/android-json-parsing-tutorial/解析 twitter 趋势 JSON 文件
我有一个网站,人们可以在其中添加他们喜欢的电视节目。 我想要一些趋势统计数据。示例: (1 个不变)生活大爆炸 (上周第 3 次)老爸老妈浪漫史 (上周第 2 个)房子 (上周第 30 位,上涨 40
我有一个带有 DatetimeIndex 和 ohlcv 股票报价列的 pandas Dataframe。我想提取满足特定阈值的价格波动/趋势:大于 0.3 美元的上升趋势/趋势和超过 -0.3 美元
尝试仅访问多伦多趋势的“名称”部分。到目前为止我有这个但是它给我错误: toronto = t.get_place_trends(id=4118) trend_array = [] for trend
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我尝试在我的网络应用程序中实现 Google 趋势。这是我的代码: using (var client = new WebClient()) { var us
我最近将 Junit 和 Emma 集成到 CruiseControl (CC) 中,因此它可以为每个构建创建漂亮的报告。我想根据 Emma 提供的一些信息(例如覆盖率百分比数字和摘要)查看一些趋势图
我正在尝试将谷歌趋势嵌入到我的代码 vuejs 中,但我找不到任何关于如何做到这一点的信息。 我尝试一下: export default { created(){ posts
我对此有点新手...基本上我需要运行一个脚本来从谷歌趋势下载.csv 文件。我按照这个reference写了下面的代码,代码如下: HttpClient client = new Defau
我正在使用非官方 Google Trends API ( https://github.com/GeneralMills/pytrends#trend ) 编写代码,但是在几乎 10 个请求之后,我收
我一直使用破折号作为 css 类和 ID 名称的分隔符: .about-us .car-pricing-guide 我见过网站使用多个下划线 __ .home__content 此外,我还看到了 2
很抱歉提出这个问题,但我已经在这个问题上停留了一段时间。 基本上我正在尝试列出一个列表: numbers=[1, 2, -1, -2, 4, 5] 并将此列表子集化为显示正/负运动(或趋势)的列表列表
我是一名优秀的程序员,十分优秀!