很多人都问这个的效果,我整了个截图发上来
项目中的一个需求,不知道是不是正解,但是搞定之后觉得挺简单的,也没有用到什么插件,更不会有版权的问题,不过只是简单的柱形图而已,大家可以参照,有时忽悠一下boss或者客户还是不错的,呵呵
我是横向显示柱形图, 事先准备一个窄点的图,便于动态拉伸冒充柱形图,我准备的图是高30,宽11,如下图
左右一定不要有渐变或者是边框之类的,这样横着拉伸就不会有不清晰的情况出现,如果你是弄竖着的就注意上下的部分,一个道理。
我是六个柱形图的对比,界面上放Image1--Image6 默认显示上面图, 每个Image后面跟一个Lable, Label1-label6 对应显示柱形图的数值,label7是他们的和 (在赋值的时候,我还处理了没有数据的情况,显示另外一个图,如倒数第二个)
然后我是异步取六个数,如果取的数我就不说了,反正取了6个数值分别写到六个lable里,然后执行下面的代码,
下面的代码,大概的意思是对比六个数值,先取出最大的一个来,以这个最大的为标准,以柱形图最宽为300为限, 动态的算出各个图的比例并设置,设完图的宽后,再强制设置一下它原来的高, 我这里是30,因为你不设置高的话,图就按比例变了高度。
private
void
DrawImage()
... {
float valM = 0;
float valTemp = 0;
float valSum = 0;
if (IsNumeric(Label1.Text))
...{
valM = Convert.ToSingle(Label1.Text);
valSum = Convert.ToSingle(Label1.Text );
}
if (IsNumeric(Label2.Text))
...{
valSum += Convert.ToSingle(Label2.Text);
if (valM < Convert.ToSingle(Label2.Text))
valM = Convert.ToSingle(Label2.Text);
}
if (IsNumeric(Label3.Text))
... {
float valM = 0;
float valTemp = 0;
float valSum = 0;
if (IsNumeric(Label1.Text))
...{
valM = Convert.ToSingle(Label1.Text);
valSum = Convert.ToSingle(Label1.Text );
}
if (IsNumeric(Label2.Text))
...{
valSum += Convert.ToSingle(Label2.Text);
if (valM < Convert.ToSingle(Label2.Text))
valM = Convert.ToSingle(Label2.Text);
}
if (IsNumeric(Label3.Text))