首页  ·  知识 ·  云计算
ZedGraph控件,饼图中加入“其它”块,记录项目中的实际实现
starnc的专栏  http://blog.csdn.net/starnc/archive/2009/02/17/389  综合  编辑:dezai  图片来源:网络
当饼图的分块大于10块的时候,往往会显得很杂乱,标签可能会叠加到一起,所以应该在饼图中加入“其它”块,把那些top10分开表示,剩下的就可以放在“其它”

当饼图的分块大于10块的时候,往往会显得很杂乱,标签可能会叠加到一起,所以应该在饼图中加入“其它”块,把那些top10分开表示,剩下的就可以放在“其它”块里,这样界面较美观,以下为代码实现

其中dataRowPro 为datatable中的datarow

private string m_strColumn = string.Empty;             // 显示该列的数字  
 
    private string m_strName = string.Empty;                // 显示列名  
 
 
 
   ArrayList dataRowProList = new ArrayList();  
   Hashtable htShowName = new Hashtable();   
  if (dataRowPro.Length > 10)     //当分类大于10的时候  
  {  
    for (int i = 0; i < dataRowPro.Length; i++)  
    {  
     dataRowProList.Add(Convert.ToDouble(dataRowPro[i][m_strColumn]));  
     htShowName.Add(dataRowProList[i], dataRowPro[i][m_strShowName].ToString().Trim());  
            }  
            dataRowProList.Sort();  
            for (int i = 0; i < dataRowProList.Count - 1; i++)  
            {  
                dataRowPro[i][m_strColumn] = dataRowProList[dataRowProList.Count - 1-i];  
                dataRowPro[i][m_strShowName] = htShowName[dataRowProList[dataRowProList.Count - 1 - i]].ToString();   
            }  
            double totals = 0.0;  
            for (int i = 0; i < 9; i++)  
            {  
                if (string.IsNullOrEmpty(dataRowPro[i][m_strColumn].ToString()) == true)  
                {  
                    dataRowPro[i][m_strColumn] = "0";  
                }  
                segment[i] = myPane.AddPieSlice(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, Color.Yellow, Color.Red, 450f, 0.1+i/50, dataRowPro[i][m_strShowName].ToString().Trim() + "(" + Math.Round(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, 2) + "%)");  
                totals += Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100;  
            }  
            totals = 100.00 - totals;  
            segment[9] = myPane.AddPieSlice(totals, Color.GreenYellow, Color.Red, 40f, 0.1, "其它" + "(" + Math.Round(totals, 2) + "%)");  
        }  
        else {  
            for (int i = 0; i < dataRowPro.Length; i++)  
            {  
                if (string.IsNullOrEmpty(dataRowPro[i][m_strColumn].ToString()) == true)  
                {  
                    dataRowPro[i][m_strColumn] = "0";  
                }  
                segment[i] = myPane.AddPieSlice(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, Color.FromArgb(ra.Next(2, 255), ra.Next(3, 235), ra.Next(4, 200)), Color.Red, 40f, 0.1, dataRowPro[i][m_strShowName].ToString().Trim() + "(" + Math.Round(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, 2) + "%)");  
            }  
        }  
        masterPane.AxisChange(); 

这是部分逻辑代码实现,只要实现了datarowpro,以下代码可直接用

本文作者:starnc的专栏 来源:http://blog.csdn.net/starnc/archive/2009/02/17/389
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读