Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向散点图中添加平均线、最小线和最大线_C#_.net_Wpf_Xaml_Charts - Fatal编程技术网

C# 向散点图中添加平均线、最小线和最大线

C# 向散点图中添加平均线、最小线和最大线,c#,.net,wpf,xaml,charts,C#,.net,Wpf,Xaml,Charts,我在wpf、C#、.NET 3.5中使用了一个散点数据点图表,我必须为最小值、最大值和平均值线添加3条水平线,这些线可能会根据我引入的值而有所不同 基本上,我从数据库中获取一些值,并将它们显示在图表中,下面是我开始创建应用程序的基本代码,但我不知道如何添加这3行代码 以下是XAML代码: <Window.Resources> <Style x:Key="BubbleDataPointStyle" TargetType="chartingToolkit:Scat

我在wpf、C#、.NET 3.5中使用了一个散点数据点图表,我必须为最小值、最大值和平均值线添加3条水平线,这些线可能会根据我引入的值而有所不同

基本上,我从数据库中获取一些值,并将它们显示在图表中,下面是我开始创建应用程序的基本代码,但我不知道如何添加这3行代码

以下是XAML代码:

 <Window.Resources>
        <Style x:Key="BubbleDataPointStyle" TargetType="chartingToolkit:ScatterDataPoint">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="chartingToolkit:ScatterDataPoint">
                        <Viewbox x:Name="viewbox">
                            <Ellipse Width="1px" Height="1px" Fill="Black"/>
                        </Viewbox>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Width" Value="3"/>
            <Setter Property="Height" Value="3"/>
        </Style>
    </Window.Resources>
    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="0,-28,0,28">
            <Grid Height="921" Background="WhiteSmoke">
                <chartingToolkit:Chart Name="lineChart" Title="Power Graph" Background="WhiteSmoke" Foreground="Black" VerticalAlignment="Top" Margin="16,36,20,0" Height="800"  IsEnabled="True">
                    <chartingToolkit:ScatterSeries Title="Points" ItemsSource="{Binding}"  DependentValueBinding="{Binding Path=Value}" IndependentValueBinding="{Binding Path=Key}" IsSelectionEnabled="True" DataPointStyle="{StaticResource BubbleDataPointStyle}">

                        <chartingToolkit:ScatterSeries.IndependentAxis>
                            <chartingToolkit:LinearAxis Orientation="X" Title="Time (Mins)" Interval="5"  />
                        </chartingToolkit:ScatterSeries.IndependentAxis>
                        <chartingToolkit:ScatterSeries.DependentRangeAxis>
                            <chartingToolkit:LinearAxis Orientation="Y" Title="Lenght" x:Name="Yaxis"/>
                        </chartingToolkit:ScatterSeries.DependentRangeAxis>
                    </chartingToolkit:ScatterSeries>
                </chartingToolkit:Chart>  
            </Grid>
        </ScrollViewer>
    </Grid>
</Window>

这是后面的代码,现在它只生成一个随机点:

 public partial class MainWindow : Window
    {
        DispatcherTimer timer = new DispatcherTimer();
        ObservableCollection<KeyValuePair<double, double>> Power = new ObservableCollection<KeyValuePair<double, double>>();
        public MainWindow()
   `enter code here`     {
            InitializeComponent();
            showColumnChart();

            timer.Interval = new TimeSpan(0,0,0,0,1);  // per 5 seconds, you could change it
            timer.Tick += new EventHandler(timer_Tick);
            timer.IsEnabled = true;

        }


        double i = 1;
        Random random = new Random();
        void timer_Tick(object sender, EventArgs e)
        {

         Power.Add(new KeyValuePair<double, double>(i, random.NextDouble()));
                i += 1;

                if(Power.Count==500)
            {
                timer.IsEnabled = false;

            }

        }

        private void showColumnChart()
        {
            lineChart.DataContext = Power;
        }

    }
}
公共部分类主窗口:窗口
{
调度程序计时器=新调度程序();
ObservableCollection Power=新的ObservableCollection();
公共主窗口()
`在此处输入代码`{
初始化组件();
showColumnChart();
timer.Interval=newtimespan(0,0,0,0,1);//每5秒,您可以更改一次
timer.Tick+=新事件处理程序(timer\u Tick);
timer.IsEnabled=true;
}
双i=1;
随机=新随机();
无效计时器勾号(对象发送方,事件参数e)
{
Power.Add(新的KeyValuePair(i,random.NextDouble());
i+=1;
如果(功率计数=500)
{
timer.IsEnabled=false;
}
}
private void showColumnChart()
{
lineChart.DataContext=电源;
}
}
}

通常情况下,您会使用
带状线来实现这一点,但工具箱似乎没有带状线。因此,请使用额外的
LineSeries

XAML:

<Window x:Class="WpfApplication336.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    xmlns:local="clr-namespace:WpfApplication336"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style x:Key="BubbleDataPointStyle" TargetType="chartingToolkit:ScatterDataPoint">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="chartingToolkit:ScatterDataPoint">
                    <Viewbox x:Name="viewbox">
                        <Ellipse Width="1px" Height="1px" Fill="Black"/>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Width" Value="3"/>
        <Setter Property="Height" Value="3"/>
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="10*"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <chartingToolkit:Chart Grid.Row="0" Name="lineChart" Title="Power Graph" Background="WhiteSmoke" Foreground="Black"  IsEnabled="True">

        <chartingToolkit:Chart.Series>

            <chartingToolkit:ScatterSeries Title="Points" ItemsSource="{Binding Power}"  DependentValueBinding="{Binding Path=Value}" IndependentValueBinding="{Binding Path=Key}" IsSelectionEnabled="True" DataPointStyle="{StaticResource BubbleDataPointStyle}"/>
            <chartingToolkit:LineSeries Title="Average" ItemsSource="{Binding PowerAvg}"  DependentValueBinding="{Binding Path=Value}" IndependentValueBinding="{Binding Path=Key}" />

        </chartingToolkit:Chart.Series>

    </chartingToolkit:Chart>

    <Button Grid.Row="1" Click="Button_Click">START</Button>
</Grid>
public class MyViewModel
{
    public ObservableCollection<KeyValuePair<double, double>> Power { get; set; }
    public ObservableCollection<KeyValuePair<double, double>> PowerAvg { get; set; }

    public MyViewModel()
    {
        Power = new ObservableCollection<KeyValuePair<double, double>>();
        PowerAvg = new ObservableCollection<KeyValuePair<double, double>>();
    }

    public void Add(double x, double y)
    {
        Power.Add(new KeyValuePair<double, double>(x, y));

        double xmin = Power.Min(kvp => kvp.Key);
        double xmax = Power.Max(kvp => kvp.Key);

        double ymin = Power.Min(kvp => kvp.Value);
        double ymax = Power.Max(kvp => kvp.Value);
        double yavg = Power.Average(kvp => kvp.Value);

        PowerAvg.Clear(); 
        PowerAvg.Add(new KeyValuePair<double, double>(xmin, yavg));
        PowerAvg.Add(new KeyValuePair<double, double>(xmax, yavg));
    }
}
public partial class MainWindow : Window
{
    DispatcherTimer timer = new DispatcherTimer();
    MyViewModel vm;

    public MainWindow()
    {
        InitializeComponent();

        vm = new MyViewModel();
        DataContext = vm;

        //showColumnChart();

        timer.Interval = new TimeSpan(0, 0, 0, 0, 1);  // per 5 seconds, you could change it
        timer.Tick += new EventHandler(timer_Tick);
        //timer.IsEnabled = true;
    }


    double i = 1;
    Random random = new Random();
    void timer_Tick(object sender, EventArgs e)
    {

        vm.Add(i, random.NextDouble());
        i += 1;

        if (vm.Power.Count == 250)
        {
            timer.Stop();

        }

    }

    private void showColumnChart()
    {
        lineChart.DataContext = vm;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        timer.Start();
    }
}

您可以轻松地为最小值和最大值添加额外的
LineSeries
,就像我们为平均值所做的那样。

您能帮我解决这个我和我的同事正在努力解决的问题吗:。非常感谢你!!!!