2017-11-19 6 views
1

既存のアプリケーション(Webフォームでは基本的にMicrosoft Chartingスタックはwinforms/webforms/razorチャートでは基本的に同じです)には、それぞれは以下のビジネスデータをスライス:ASP.NET Charting Pie Chart - スライスあたりのラベルの内側と外側の両方

  1. レーベル
  2. カラー(分類に使用される、複数のスライスのために同じ色)

要件が持つチャートでありますうち、このような1つの図(モックアップ)内のすべての情報のレイアウト:

シリーズ/ポイントにCUSTOMPROPERTIESを使用して

Pie Chart with both inside and outside Labels

私はインサイド

のいずれかで

Pie Chart with Labels inside

、または各データポイントを表示することができます外レーベル:

Pie Chart with Labels outside

でもありません どちらも。私は何とか円グラフをの両方に表示することができます各データポイントの内側と外側の両方のラベル?

私はこれが端の場合であることを認識しています(通常は、これを視覚化するために凡例+色を使用しますが、すでに色を分類するために使用しています)。私はビットマップへのレンダリングをまず避け、そこにラベルテキストを手動でレンダリングします(グラフをWebページと生成されたドキュメントの両方にストリームする仕組みがあるため)。

答えて

1

2つのシリーズと2つのチャート領域を作成し、それらを重ね合わ:

enter image description here

ASPX:

<asp:Chart ID="Chart1" runat="server"> 
    <series> 
     <asp:Series ChartType="Pie" 
      Name="Series1" 
      CustomProperties="PieLabelStyle=Inside, PieStartAngle=270" 
      BorderColor="White" 
      ChartArea="ChartArea1"> 
     </asp:Series> 
     <asp:Series ChartType="Pie" 
      Name="Series2" 
      CustomProperties="PieLabelStyle=Outside, PieStartAngle=270" 
      ChartArea="ChartArea2"> 
     </asp:Series> 
    </series> 
    <chartareas> 
     <asp:ChartArea Name="ChartArea1" > 
      <InnerPlotPosition Height="95" Width="45.98404" X="27.00798" Y="2.50000072" /> 
     </asp:ChartArea> 
     <asp:ChartArea Name="ChartArea2" 
      AlignWithChartArea="ChartArea1" 
      AlignmentOrientation="All" 
      BackColor="Transparent"> 
      <InnerPlotPosition Height="95" Width="45.98404" X="27.00798" Y="2.50000072" /> 
     </asp:ChartArea> 
     </chartareas> 
</asp:Chart> 

CS:

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<MyDataModel> data = new List<MyDataModel> { 
     new MyDataModel { Color = Color.LightBlue, Label = "Value 1", Value = 100 }, 
     new MyDataModel { Color = Color.LightBlue, Label = "Value 2", Value = 100 }, 
     new MyDataModel { Color = Color.LightBlue, Label = "Value 3", Value = 100 }, 
     new MyDataModel { Color = Color.Blue, Label = "Value 4", Value = 100 }, 
     new MyDataModel { Color = Color.Blue, Label = "Value 5", Value = 400 }, 
    }; 

     foreach (MyDataModel dm in data) 
     { 
      Chart1.Series[0].Points.Add(new DataPoint 
      { 
       Color = dm.Color, 
       Label = dm.Value.ToString(), 
       YValues = new double[] { dm.Value } 
      }); 

      Chart1.Series[1].Points.Add(new DataPoint 
      { 
       Color = Color.Transparent, 
       Label = dm.Label, 
       YValues = new double[] { dm.Value } 
      }); 
     } 
} 
+1

I ...のdidnあなたがChartAreasでそれを行うことができるのは分かりません。まさに華麗な合成チャートは、Chartingコンポーネントをもっと強力にします。 –

+1

@ Paul-Jan:私はそれが醜いハックだと思う...:O)しかし、明らかに、それは私たちが仕事のために手に入れたものです。 – jsanalytics

関連する問題