kopia lustrzana https://github.com/dl2alf/AirScout
350 wiersze
13 KiB
C#
350 wiersze
13 KiB
C#
// --------------------------------------------------------------------------------------------------------------------
|
|
// <copyright file="ShowMeTheNumbersExamples.cs" company="OxyPlot">
|
|
// Copyright (c) 2014 OxyPlot contributors
|
|
// </copyright>
|
|
// <summary>
|
|
// Examples from the book "Show Me the Numbers" by Stephen Few
|
|
// </summary>
|
|
// --------------------------------------------------------------------------------------------------------------------
|
|
|
|
namespace ExampleLibrary
|
|
{
|
|
using System.Collections.Generic;
|
|
|
|
using OxyPlot;
|
|
using OxyPlot.Axes;
|
|
using OxyPlot.Series;
|
|
|
|
/// <summary>
|
|
/// Examples from the book "Show Me the Numbers" by Stephen Few
|
|
/// </summary>
|
|
[Examples("Examples from the book 'Show Me the Numbers'"), Tags("Showcase")]
|
|
public class ShowMeTheNumbersExamples
|
|
{
|
|
/// <summary>
|
|
/// The graph 1.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Q1 2003 Calls by Region")]
|
|
public static PlotModel Graph1()
|
|
{
|
|
var pm = new PlotModel { Title = "Q1 2003 Calls by Region", PlotAreaBorderThickness = new OxyThickness(0) };
|
|
var categoryAxis = new CategoryAxis
|
|
{
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.None
|
|
};
|
|
categoryAxis.Labels.AddRange(new[] { "North", "East", "South", "West" });
|
|
pm.Axes.Add(categoryAxis);
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = 0,
|
|
Maximum = 6000,
|
|
MajorStep = 1000,
|
|
MinorStep = 1000,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "#,0"
|
|
});
|
|
var series = new ColumnSeries { FillColor = OxyColors.Black };
|
|
series.Items.Add(new ColumnItem { Value = 3000 });
|
|
series.Items.Add(new ColumnItem { Value = 4500 });
|
|
series.Items.Add(new ColumnItem { Value = 2100 });
|
|
series.Items.Add(new ColumnItem { Value = 4800 });
|
|
pm.Series.Add(series);
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 2.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("2003 Sales")]
|
|
public static PlotModel Graph2()
|
|
{
|
|
var pm = new PlotModel
|
|
{
|
|
Title = "2003 Sales",
|
|
PlotAreaBorderThickness = new OxyThickness(0),
|
|
IsLegendVisible = false
|
|
};
|
|
var sales1 = new[] { 1000, 1010, 1020, 1010, 1020, 1030, 1000, 500, 1000, 900, 900, 1000 };
|
|
var sales2 = new[] { 2250, 2500, 2750, 2500, 2750, 3000, 2500, 2750, 3100, 2800, 3100, 3500 };
|
|
var categoryAxis = new CategoryAxis
|
|
{
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.None
|
|
};
|
|
categoryAxis.Labels.AddRange(new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" });
|
|
pm.Axes.Add(categoryAxis);
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = 0,
|
|
Maximum = 4000,
|
|
MajorStep = 500,
|
|
MinorStep = 500,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "#,0"
|
|
});
|
|
var s1 = new LineSeries { Color = OxyColors.Orange };
|
|
for (int i = 0; i < 12; i++)
|
|
{
|
|
s1.Points.Add(new DataPoint(i, sales1[i]));
|
|
}
|
|
|
|
var s2 = new LineSeries { Color = OxyColors.Gray };
|
|
for (int i = 0; i < 12; i++)
|
|
{
|
|
s2.Points.Add(new DataPoint(i, sales2[i]));
|
|
}
|
|
|
|
pm.Series.Add(s1);
|
|
pm.Series.Add(s2);
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 3.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Headcount")]
|
|
public static PlotModel Graph3()
|
|
{
|
|
var pm = new PlotModel
|
|
{
|
|
Title = "Headcount",
|
|
PlotAreaBorderThickness = new OxyThickness(0),
|
|
PlotMargins = new OxyThickness(100, 40, 20, 40)
|
|
};
|
|
var values = new Dictionary<string, double> {
|
|
{ "Manufacturing", 240 },
|
|
{ "Sales", 160 },
|
|
{ "Engineering", 50 },
|
|
{ "Operations", 45 },
|
|
{ "Finance", 40 },
|
|
{ "Info Systems", 39 },
|
|
{ "Legal", 25 },
|
|
{ "Marketing", 10 }
|
|
};
|
|
pm.Axes.Add(
|
|
new CategoryAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
ItemsSource = values,
|
|
LabelField = "Key",
|
|
TickStyle = TickStyle.None,
|
|
AxisTickToLabelDistance = 10,
|
|
StartPosition = 1,
|
|
EndPosition = 0
|
|
});
|
|
pm.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0, Maximum = 250, MajorStep = 50, MinorStep = 50, AxislineStyle = LineStyle.Solid, TickStyle = TickStyle.Outside, MinimumPadding = 0, MaximumPadding = 0 });
|
|
pm.Series.Add(new BarSeries { FillColor = OxyColors.Black, ItemsSource = values, ValueField = "Value" });
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 4.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Regional % of Total Expenses")]
|
|
public static PlotModel Graph4()
|
|
{
|
|
var pm = new PlotModel { Title = "Regional % of Total Expenses", PlotAreaBorderThickness = new OxyThickness(0) };
|
|
var categoryAxis = new CategoryAxis
|
|
{
|
|
TickStyle = TickStyle.None,
|
|
GapWidth = 0
|
|
};
|
|
categoryAxis.Labels.AddRange(new[] { "West\n34%", "East\n30%", "North\n20%", "South\n16%" });
|
|
pm.Axes.Add(categoryAxis);
|
|
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = 0,
|
|
Maximum = 0.35 + double.Epsilon,
|
|
MajorStep = 0.05,
|
|
MinorStep = 0.05,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "P0"
|
|
});
|
|
|
|
var series = new ColumnSeries
|
|
{
|
|
ColumnWidth = 1.0,
|
|
StrokeColor = OxyColors.DarkGray,
|
|
StrokeThickness = 1.0,
|
|
FillColor = OxyColors.Black,
|
|
};
|
|
series.Items.Add(new ColumnItem { Value = 0.34 });
|
|
series.Items.Add(new ColumnItem { Value = 0.3 });
|
|
series.Items.Add(new ColumnItem { Value = 0.2 });
|
|
series.Items.Add(new ColumnItem { Value = 0.16 });
|
|
pm.Series.Add(series);
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 5.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Actual to Plan Variance")]
|
|
public static PlotModel Graph5()
|
|
{
|
|
var pm = new PlotModel { Title = "Actual to Plan Variance", PlotAreaBorderThickness = new OxyThickness(0) };
|
|
var values = new Dictionary<string, double>();
|
|
values.Add("Sales", 7);
|
|
values.Add("Marketing", -7);
|
|
values.Add("Systems", -2);
|
|
values.Add("HR", -17);
|
|
values.Add("Finance", 5);
|
|
pm.Axes.Add(new CategoryAxis { ItemsSource = values, LabelField = "Key", TickStyle = TickStyle.None });
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = -20,
|
|
Maximum = 10,
|
|
MinorStep = 5,
|
|
MajorStep = 5,
|
|
Layer = AxisLayer.AboveSeries,
|
|
AxislineStyle = LineStyle.Solid,
|
|
ExtraGridlines = new double[] { 0 },
|
|
ExtraGridlineColor = OxyColors.Black,
|
|
ExtraGridlineThickness = 3,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "+0;-0;0"
|
|
});
|
|
pm.Series.Add(
|
|
new ColumnSeries
|
|
{
|
|
FillColor = OxyColors.Orange,
|
|
NegativeFillColor = OxyColors.Gray,
|
|
ItemsSource = values,
|
|
ValueField = "Value",
|
|
});
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 6.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Order Count by Order Size")]
|
|
public static PlotModel Graph6()
|
|
{
|
|
var pm = new PlotModel
|
|
{
|
|
Title = "Order Count by Order Size",
|
|
PlotAreaBorderThickness = new OxyThickness(0),
|
|
PlotMargins = new OxyThickness(60, 4, 4, 60)
|
|
};
|
|
var values = new Dictionary<string, double>
|
|
{
|
|
{ " <$10", 5000 },
|
|
{ ">=$10\n &\n <$20", 1500 },
|
|
{ ">=$20\n &\n <$30", 1000 },
|
|
{ ">=$40\n &\n <$40", 500 },
|
|
{ ">=$40", 200 }
|
|
};
|
|
pm.Axes.Add(new CategoryAxis
|
|
{
|
|
AxislineStyle = LineStyle.Solid,
|
|
ItemsSource = values,
|
|
LabelField = "Key",
|
|
TickStyle = TickStyle.None
|
|
});
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = 0,
|
|
Maximum = 6000,
|
|
MajorStep = 1000,
|
|
MinorStep = 1000,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "+0;-0;0"
|
|
});
|
|
pm.Series.Add(new ColumnSeries { FillColor = OxyColors.Orange, ItemsSource = values, ValueField = "Value" });
|
|
return pm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The graph 7.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[Example("Correlation of Employee Heights and Salaries")]
|
|
public static PlotModel Graph7()
|
|
{
|
|
var pm = new PlotModel
|
|
{
|
|
Title = "Correlation of Employee Heights and Salaries",
|
|
PlotAreaBorderThickness = new OxyThickness(0)
|
|
};
|
|
var values = new[]
|
|
{
|
|
new DataPoint(62, 39000),
|
|
new DataPoint(66, 44000),
|
|
new DataPoint(64, 50000),
|
|
new DataPoint(66, 49500),
|
|
new DataPoint(67, 52000),
|
|
new DataPoint(68, 50000),
|
|
new DataPoint(66, 56000),
|
|
new DataPoint(67, 56000),
|
|
new DataPoint(72, 56000),
|
|
new DataPoint(68, 58000),
|
|
new DataPoint(69, 62000),
|
|
new DataPoint(71, 63000),
|
|
new DataPoint(65, 64000),
|
|
new DataPoint(68, 71000),
|
|
new DataPoint(72, 72000),
|
|
new DataPoint(74, 69000),
|
|
new DataPoint(74, 79000),
|
|
new DataPoint(77, 81000)
|
|
};
|
|
pm.Axes.Add(
|
|
new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = 30000,
|
|
Maximum = 90000,
|
|
MajorStep = 10000,
|
|
MinorStep = 10000,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside,
|
|
StringFormat = "0,0"
|
|
});
|
|
pm.Axes.Add(new LinearAxis
|
|
{
|
|
Position = AxisPosition.Bottom,
|
|
Minimum = 60,
|
|
Maximum = 80,
|
|
MajorStep = 5,
|
|
MinorStep = 5,
|
|
AxislineStyle = LineStyle.Solid,
|
|
TickStyle = TickStyle.Outside
|
|
});
|
|
pm.Series.Add(
|
|
new ScatterSeries
|
|
{
|
|
ItemsSource = values,
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerSize = 3.0,
|
|
MarkerFill = OxyColors.White,
|
|
MarkerStroke = OxyColors.Black,
|
|
DataFieldX = "X",
|
|
DataFieldY = "Y"
|
|
});
|
|
return pm;
|
|
}
|
|
|
|
}
|
|
} |