none
[WPF]グラフの描画について RRS feed

  • 質問

  • 質問1 散布図を描かせる時のシリーズ(XAMLのScatterSeries)の修飾方法を教えてください。
    (1) マーカを非表示にする方法
    (2) マーカに任意の描画オブジェクトを指定する方法
    (3) マーカとマーカを結ぶ線の太さと色を指定する方法

    質問2 バインディング時のシリーズの描画を高速化する方法を教えてください。
    ・データ件数が増加すると描画に時間がかかります。
    ・例えば途中経過の描画を省略することで描画速度を向上させることができますか?

    環境
    ・WPF Toolkit 2010年リリース版(Ver.3.5.50211.1)
    ・Visual Studio 2010 SP1 (XAML & C#)

    よろしくお願いします。

    // XAML
    
    <Window x:Class="Test1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="400" Width="525" xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Loaded="Window_Loaded">
        <chartingToolkit:Chart Name="chart1" Title="X1とY1の相関">
            <chartingToolkit:Chart.Axes>
                <chartingToolkit:LinearAxis Title="測定値Y1" Name="yAxis" ShowGridLines="True" Orientation="Y" Location="Left" Interval="10" Maximum="380" Minimum="280"></chartingToolkit:LinearAxis>
                <chartingToolkit:LinearAxis Title="測定値X1" Name="xAxis" ShowGridLines="True" Orientation="X" Location="Bottom" Interval="200" Maximum="2000" Minimum="0"></chartingToolkit:LinearAxis>
            </chartingToolkit:Chart.Axes>
            <chartingToolkit:ScatterSeries Title="X1vsY1" Name="cnSeries" DependentValuePath="Y1" IndependentValuePath="X1" ItemsSource="{Binding}" Foreground="Black"></chartingToolkit:ScatterSeries>
        </chartingToolkit:Chart>
    </Window>
    
    // C#
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Controls.DataVisualization.Charting;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace Test1
    {
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                Sample[] sample = new Sample[1600];
                for (int index = 0; index < sample.Length; index++)
                {
                    sample[index] = new Sample((float)(index * 1.1), (float)(300 + index * 0.01));
                }
                chart1.DataContext = sample;
            }
        }
    
        public sealed class Sample
        {
            public Sample(float x1, float y1)
            {
                _x1 = x1;
                _y1 = y1;
            }
            public float X1 { get { return _x1; } }
            public float Y1 { get { return _y1; } }
    
            private readonly float _x1;
            private readonly float _y1;
        }
    
    }
    • 編集済み MicroVAX 2012年6月20日 11:26
    • 移動 山本春海 2012年6月21日 5:54 より適切と思われるカテゴリに移動 (移動元:Visual C#)
    2012年6月20日 11:20

回答

  • 二か月ほど前の質問ですが返信させて頂きます。質問の直接の回答ではありませんので、了承ください。

    別スレッドでも紹介させて頂いたのですが、市販のコントロールを使う方法もあります。Inftargisitics 社の NetAdvantage for WPF に含まれる xamDataChart  は非常に表現力が高く、かつ高速なコントロールなので、目的を達成できる可能性があります。体験版をダウンロードして、サンプルブラウサーを一通り眺める中で、期待する機能が含まれているかも知れません。

    以上、参考になれば幸いです。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク MicroVAX 2014年11月28日 4:24
    2012年8月14日 1:19
    モデレータ