Legend 快速入门
许多绘图表具有 Label 属性,可以设置该属性,以便它们显示在图例中。
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
sig1.LegendText = "Sin";
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
sig2.LegendText = "Cos";
WpfPlot1.Plot.ShowLegend();
WpfPlot1.Refresh();
从右到左 (RTL) 文本支持
启用从右到左 (RTL) 支持可正确地以 RTL 语言呈现文本。
LabelStyle.RTLSupport = true; // enable right-to-left text support
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
sig1.LegendText = "אמת"; // example right-to-left text
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
sig2.LegendText = "English"; // example left-to-right text
WpfPlot1.Plot.ShowLegend();
WpfPlot1.Refresh();
手动图例项
图例可以手动构建。
WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
WpfPlot1.Plot.Legend.IsVisible = true;
LegendItem item1 = new()
{
LineColor = Colors.Magenta,
MarkerFillColor = Colors.Magenta,
MarkerLineColor = Colors.Magenta,
LineWidth = 2,
LabelText = "Alpha"
};
LegendItem item2 = new()
{
LineColor = Colors.Green,
MarkerFillColor = Colors.Green,
MarkerLineColor = Colors.Green,
LineWidth = 4,
LabelText = "Beta"
};
LegendItem[] items = { item1, item2 };
WpfPlot1.Plot.ShowLegend(items);
WpfPlot1.Refresh();
图例自定义
直接访问 Legend 对象以获取高级自定义选项。
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
sig1.LegendText = "Sin";
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
sig2.LegendText = "Cos";
WpfPlot1.Plot.Legend.IsVisible = true;
WpfPlot1.Plot.Legend.Alignment = Alignment.UpperCenter;
WpfPlot1.Plot.Legend.OutlineColor = Colors.Navy;
WpfPlot1.Plot.Legend.OutlineWidth = 5;
WpfPlot1.Plot.Legend.BackgroundColor = Colors.LightBlue;
WpfPlot1.Plot.Legend.ShadowColor = Colors.Blue.WithOpacity(.2);
WpfPlot1.Plot.Legend.ShadowOffset = new(10, 10);
WpfPlot1.Plot.Legend.FontSize = 32;
WpfPlot1.Plot.Legend.FontName = Fonts.Serif;
WpfPlot1.Refresh();
图例方向
图例项可以水平排列,而不是垂直排列
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51, phase: .2));
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51, phase: .4));
var sig3 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51, phase: .6));
sig1.LegendText = "Signal 1";
sig2.LegendText = "Signal 2";
sig3.LegendText = "Signal 3";
WpfPlot1.Plot.ShowLegend(Alignment.UpperLeft, Orientation.Horizontal);
WpfPlot1.Refresh();
图例换行
图例项可能会换行以改善大量项的显示
for (int i = 1; i <= 10; i++)
{
double[] data = Generate.Sin(51, phase: .02 * i);
var sig = WpfPlot1.Plot.Add.Signal(data);
sig.LegendText = $"#{i}";
}
WpfPlot1.Plot.Legend.IsVisible = true;
WpfPlot1.Plot.Legend.Orientation = Orientation.Horizontal;
WpfPlot1.Refresh();
多个图例
可以将多个图例添加到绘图中
for (int i = 1; i <= 5; i++)
{
double[] data = Generate.Sin(51, phase: .02 * i);
var sig = WpfPlot1.Plot.Add.Signal(data);
sig.LegendText = $"Signal #{i}";
sig.LineWidth = 2;
}
// default legend
var leg1 = WpfPlot1.Plot.ShowLegend();
leg1.Alignment = Alignment.LowerRight;
leg1.Orientation = Orientation.Vertical;
// additional legend
var leg2 = WpfPlot1.Plot.Add.Legend();
leg2.Alignment = Alignment.UpperCenter;
leg2.Orientation = Orientation.Horizontal;
WpfPlot1.Refresh();
情节外的传说
使用接受 Edge 的 ShowLegend() 重载在数据区域之外显示图例。
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin());
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos());
sig1.LegendText = "Sine";
sig2.LegendText = "Cosine";
WpfPlot1.Plot.ShowLegend(Edge.Right);
WpfPlot1.Refresh();
自动图例项自定义字体
在图例中使用 TTF 文件中的自定义字体。
Fonts.AddFontFile("Alumni Sans", Path.Combine(GetFontsBasePath(), @"AlumniSans/AlumniSans-Regular.ttf"), bold: false, italic: false);
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
sig1.LegendText = "Sin";
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
sig2.LegendText = "Cos";
WpfPlot1.Plot.Legend.FontName = "Alumni Sans";
WpfPlot1.Plot.Legend.FontSize = 48;
WpfPlot1.Plot.Legend.FontColor = Colors.Red;
WpfPlot1.Plot.ShowLegend();
WpfPlot1.Refresh();
手动图例项自定义字体
在图例中使用 TTF 文件中的自定义字体(手动图例项)。
// Add a font file to use its typeface for fonts with a given name
Fonts.AddFontFile(
name: "Alumni Sans",
path: Path.Combine(Paths.FontFolder, @"AlumniSans/AlumniSans-Regular.ttf"));
var sig1 = WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
sig1.LegendText = "Sin";
var sig2 = WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
sig2.LegendText = "Cos";
WpfPlot1.Plot.Legend.ManualItems.Add(new LegendItem()
{
LabelText = "Custom",
LabelFontName = "Alumni Sans",
LabelFontSize = 18,
LabelFontColor = Colors.Magenta,
LinePattern = LinePattern.Dotted,
LineWidth = 2,
LineColor = Colors.Magenta,
});
WpfPlot1.Refresh();