2016-04-14 23 views
2

を意味します。私は伝説でこれを表現する必要があります。私はちょうど方法を知らない。私はすでに試した何は、グラフの凡例は、私は次のようになり、私のアプリケーションで縦棒グラフを作成した2つの色

私はLegendCustomItemsを追加しました。ここでは、コードは次のとおりです。

Legend currentLegend = chart.Legends.FindByName(chart.Series[series].Legend); 
if (currentLegend != null) 
{ 
    currentLegend.LegendStyle = LegendStyle.Table; 
    LegendItem li    = new LegendItem(); 
    li.Name      = series; 
    li.Color     = Color.Red; 
    li.BorderColor    = Color.Transparent; 
    currentLegend.CustomItems.Add(li); 
} 

これは、次の表現になり:

Column chart with legend representing positive and negative color

私はそれと一緒に暮らすことができます。しかし、チャートにシリーズを追加するとすぐに、要素の順序が破棄されます。次に例を示します。

enter image description here

私は2つのオプションのいずれかを持っているしたいと思います:

  1. 一緒に正と負の色を維持するかにもよりよい解決策を持っている可能性があり伝説の中で二重に着色されたタイルは1つだけです。このような何か:

enter image description here

は、あなたは私がこの問題を解決する助けてくださいもらえますか?

事前に感謝します。

答えて

2

はい、できます。ただし、元のLegendを実際に変更することはできません。したがって、完璧な結果を得るには、代わりに新しいカスタムLegendを作成する必要があります。

here for an exampleを参照してください。特に注意してください..!

しかし、おそらくあなたは少し簡単に離れていくことができます。下記参照!

最初に理解しなければならないのは、LegendItemsです。常にです。リストの最後に移動します。したがって、あなたが追加したSeriesにある場合を除いて、それらをまとめておくことはできません。あなたはSeries.Insert(..)を使用して行うことができますが、これらの2色の四角形を使用すると、はるかに良いです。

したいグラフィックスを表示するには、単にビットマップなど、いずれかのディスク上またはその場でそれらを作成し、グラフのImagesコレクションに保存:今すぐ

Legend L = chart1.Legends[0]; 
Series S = chart1.Series[0]; 

// either load an image from disk (or resources) 
Image img = Image.FromFile(someImage); 

// or create it on the fly: 
Bitmap bmp = new Bitmap(32, 14); 
using (Graphics G = Graphics.FromImage(bmp)) 
{ 
    G.Clear(Color.Red); 
    G.FillPolygon(Brushes.LimeGreen, new Point[] { new Point(0,0), 
     new Point(32,0), new Point(0,14)}); 
} 

チャートのNamedImageコレクションに追加:

chart1.Images.Add(new NamedImage("dia", bmp)); 

は、今あなたが必要なだけのLegendItemsを作成することができます。

LegendItem newItem = new LegendItem(); 
newItem.ImageStyle = LegendImageStyle.Rectangle; 
newItem.Cells.Add(LegendCellType.Image, "dia", ContentAlignment.MiddleLeft); 
newItem.Cells.Add(LegendCellType.Text, S.Name, ContentAlignment.MiddleLeft); 

そしてLegendに追加します:

L.CustomItems.Add(newItem); 

残念ながら、あなたは、元の項目を削除することはできません。

は、あなたが何ができるか、最初から新しいLegendを作成する以外に、このです:

クリアこのようなテキスト:

S.LegendText = " "; // blank, not empty! 

あなたがすべてDataPointsColorsとにかく設定してきたように

S.Color = Color.Transparent; 

これを削除することもできます。また、色が付いていないすべての点を透明にするので、それらをすべて色付けしてください!

一部のスペースがまだ撮られていることに注意してください。ここで

は、いくつかの色の点で、結果であり、あなたのラインシリーズが追加さ:

enter image description here

+0

多くのおかげで、それが助けました! – Konstantin

関連する問題