如何配置柱形图的颜色?

Posted

技术标签:

【中文标题】如何配置柱形图的颜色?【英文标题】:How can I configure the coloring of a column chart? 【发布时间】:2010-07-11 02:40:13 【问题描述】:

我正在寻找一种自定义柱形图的方法。 Open office 和 Excel 为值为 1、2、3、3、2 的列生成以下图表。但是,我想生成具有以下属性的图表。

    图表应该有五个条形图。 所有条形的高度必须相同。 图表应根据其值对条形图进行着色。在此示例中,图表应使用三种颜色,因为存在三个不同的值。

如果您知道任何其他可以自动生成此类图表的软件包,我很乐意尝试一下。

【问题讨论】:

如果“所有条形必须具有相同的高度”,为什么还要使用条形图?? 【参考方案1】:

在 Excel 中,您无法通过简单的步骤完成此操作。您在 Excel 中的唯一选择是手动更改每列的颜色或逐点更改颜色,如您所见 here。我认为通过VBA 代码你可以到达那里。

我建议使用Microsoft ASP.NET built-in chart control。它会给你很多定制的可能性。我会尝试发布一个工作示例。

编辑:

刚刚设法得到一个工作样本:

这是aspx页面代码:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

<%@ Register assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" namespace="System.Web.UI.DataVisualization.Charting" tagprefix="asp" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

    <asp:Chart ID="Chart1" runat="server" Width="300px">
    <Series>
        <asp:Series Name="Series1" ChartArea="ChartArea1" MarkerSize="1">
            <Points>
                <asp:DataPoint XValue="1" YValues="1" />
                <asp:DataPoint XValue="2" YValues="2" />
                <asp:DataPoint XValue="3" YValues="3" />
                <asp:DataPoint XValue="4" YValues="3" />
                <asp:DataPoint XValue="5" YValues="2" />
            </Points>
        </asp:Series>
    </Series>
    <ChartAreas>
        <asp:ChartArea Name="ChartArea1">
        <AxisX Interval = "1"></AxisX>
        </asp:ChartArea>
    </ChartAreas>
</asp:Chart>    

</asp:Content>

这是我实现的代码隐藏代码 - 不是防弹的,因为它需要更多测试...

public partial class _Default : System.Web.UI.Page

    private static Dictionary<System.Drawing.Color, double> dictionary =
        new System.Collections.Generic.Dictionary<System.Drawing.Color, double>();

    private Color CreateRandomColor()
    
        Random randonGen = new Random();

        Color randomColor = Color.FromArgb(randonGen.Next(255), randonGen.Next(255), randonGen.Next(255));

        return randomColor;
    

    protected void Page_Load(object sender, EventArgs e)
    
        FormatChart();
    

    private bool IsColorUsed(Color color)
    
        return dictionary.Any(kvp => kvp.Key == color);
    

    private void FormatChart()
    
        foreach (var point in Chart1.Series[0].Points)
        
            // Point with same Y value already exist?
            var sameYValue = dictionary.Any(kvp => kvp.Value == point.YValues.First());

            if (sameYValue)
            
                //Getting the Y point...
                var yValue = dictionary.FirstOrDefault(kvp => kvp.Value == point.YValues.First());

                // Applying same color...
                point.Color = yValue.Key;
            
            else // Different Y value
            
                Color color = CreateRandomColor();

                // Getting a new Color that isn't used yet...
                while (IsColorUsed(color))
                
                    color = CreateRandomColor();
                

                point.Color = color;

                dictionary.Add(color, point.XValue);
            
        
    

这是生成的图表:

alt text http://www.freeimagehosting.net/uploads/22d240b0e0.png

【讨论】:

我不是 .NET 程序员。但是,请随时为 .NET 用户发布解决方案。

以上是关于如何配置柱形图的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

PHPWordPHPWord生成图表-柱形图 | 设置数值类别展示展示多组数据

PHPWordPHPWord生成图表-柱形图 | 设置数值类别展示展示多组数据

PHPWordPHPWord生成图表-柱形图 | 设置数值类别展示展示多组数据

如何在JSP中实现柱形图 [

如何用Highcharts制作柱形图

如何利用Python中的Pandas库绘制柱形图