C#课设-数据可视化大屏-T2

接上一篇帖子,本帖子的内容在于实现四个图形的绘制。既然是绘图,那我们就需要数据,在当前项目的exe文件的同目录下建立数据文件夹用来存放数据,如图所示。

引入开源库OxyPlot

绘图采用第三方的开源库OxyPlot,引入到项目方法如下:

 

之后点击安装即可。

说明:实例中的数据均为模拟的虚构数据

实例中所有数据我们在项目中添加一个专门的类DataPars来存储。

绘制棒状图

棒状图数据如图:

读取数据之前我们需要知道数据的路径,利用如下代码可以获得当前程序运行的地址,以字符串的形式返回;

string BasePath = System.AppDomain.CurrentDomain.BaseDirectory;

根据我们之前存数据的位置,对上述得到的地址进行字符串加法就可,之后利用相关函数读取数据的所有行,注意到我们棒状图的横轴是数值,纵轴是类别,所以需要设置两个数值,注意数组的长度和类型,这部分代码如下:

string[] strarry = File.ReadAllLines(csvfile,Encoding.Default);
dp.GameNames = new string[strarry.Length - 1];
dp.GameSales = new double[strarry.Length - 1];

 对得到的原始数据,我们以逗号来分割字符串,并将分割之后的字符串的第一列、第二列分别给与上述初始化的数组。注意分割之后的是字符串类型,使用时需要将其转化为double类型。这部分代码如下:

for (int i = 0; i < strarry.Length - 1; i++)
{
   string tempstr = strarry[i + 1];
   string[] strings = tempstr.Split(',');
   dp.GameNames[i] = strings[0];
   dp.GameSales[i] = double.Parse(strings[1]);
}

绘图部分,在之前设置的绘制图像的区域内添加绘图模块

 添加模块之后,设置边框宽度、背景颜色、透明度等等,读者也可自行摸索。

//绘图
pv1.Model = new OxyPlot.PlotModel();
//pv1.Model.Title = "部分游戏营收金额";
//将绘图的边框的宽度改为0
pv1.Model.PlotAreaBorderThickness = new OxyPlot.OxyThickness(0);
//设置背景和透明度
pv1.Background = new SolidColorBrush(Colors.Gray);
pv1.Background.Opacity = 0.1;

添加坐标轴,左侧分类轴,下方数值轴。

//添加左方的分类轴
CategoryAxis ca = new CategoryAxis();
ca.Position = AxisPosition.Left;
for (int i = 0; i < dp.GameNames.Length - 1; i++)
{
ca.Labels.Add(dp.GameNames[i]);
}
ca.FontSize = 8;
ca.TickStyle = TickStyle.None;
pv1.Model.Axes.Add(ca);

//添加下方的数值轴
LinearAxis la = new LinearAxis();
la.Position = AxisPosition.Bottom;
la.IsAxisVisible = false;
pv1.Model.Axes.Add(la);

添加棒状图的数据,并绘制。

BarSeries bs = new BarSeries();
for (int i = 0; i < dp.GameSales.Length - 1; i++)
{
BarItem bt = new BarItem(dp.GameSales[i]);
bs.Items.Add(bt);

}
pv1.Model.Series.Add(bs);
//刷新
pv1.Model.InvalidatePlot(true);

绘制图形效果如下:

 绘制圆环图

圆环图数据如图:

读取数据的方式和棒状图读取数据的方法类似,这里不再过多赘述,在绘图区域添加plotview模块,之后初始化并设置相关属性,如棒状图类似,这里不再过多赘述。

绘图部分代码如下:

PieSeries ps = new PieSeries();
for(int i = 0; i < strarry.Length -1; i++)
{
PieSlice bt = new PieSlice(dp.GameSeries[i], dp.GamePercent[i]);
ps.Slices.Add(bt);
}
//设置圆环状
ps.InnerDiameter = 0.5;

pv2.Model.Series.Add(ps);
pv2.Model.InvalidatePlot(true);

绘制效果如图所示:

绘制K线图

K线图数据如图:

 读取数据的方式和棒状图读取数据的方法类似,这里不再过多赘述,在绘图区域添加plotview模块,之后初始化并设置相关属性,如棒状图类似,这里不再过多赘述。

绘图部分代码如下:

CandleStickSeries css = new CandleStickSeries();
for(int i = 0;i< dp.Date.Length;i++)
{
HighLowItem hlt = new HighLowItem();
hlt.X = dp.Date[i].ToOADate();
hlt.Open = dp.Open[i];
hlt.Close = dp.Close[i];
hlt.High = dp.High[i];
hlt.Low = dp.Low[i];
css.Items.Add(hlt);
}

pv3.Model.Series.Add(css);
pv3.Model.InvalidatePlot(true);

绘制效果如图所示:

 绘制等值线图与热力图综合

此部分若有兴趣可关注后与我私信获得源码及答疑,这里不做说明和代码注释!

绘制效果如图所示:

 整体的大屏效果如下图所示:

 双击实现图片放大

代码如下:

private void Big_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// sender表示事件是谁触发的
PlotView pvtemp = sender as PlotView;
DockPanel dp = (DockPanel)pvtemp.Parent;
dp.Children.Clear();

Window wnew  = new Window();
Grid gnew = new Grid();
gnew.Children.Add(pvtemp);
wnew.Content = gnew;
wnew.ShowDialog();

gnew.Children.Clear ();
dp.Children.Add(pvtemp);

}

源码或答疑关注之后私信就行,觉得内容不错可以点赞收藏关注三连走一波~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值