我很难为列表中包含的一组行对象创建一个箱形图。数据本身填充得足够精细,但图表为列表中的每个对象创建了不同的x值,这不是预期的。也许我在列表中使用了错误的绑定方法?以下是绑定发生的代码片段:
domQuery(".top_button").on("click", function() {
// do something
});
编辑:
这是一个清单。它包含“Freight Cost / Pc - $”列的每一行值。我相信我只有一个系列。它当前正在为列表中的每个y值创建一个x值。我希望每个y值只有一个独立的值。换句话说,我正在处理一个单变量样本。我甚至不明白为什么这是一个问题。我认为箱形图严格用于显示与单变量数据相关的描述性统计数据。
答案 0 :(得分:4)
DataPoint
ChartType
BoxPlot
是统计数据的图形描述。
您有两种使用DataPoints
图表的基本方法:
您可以添加多个AddXY
,例如使用DataPoint
电话。为此,您必须提供(至少)六个Y值,其中包含要显示的统计值。
或者你可以'绑定' a Series
到图表中的另一个系列。如果您有多个BoxPlot DataPoint
,则可以在每个DataPoints
中显示其统计信息。
主要区别在于,在第一种情况下,您需要已经拥有统计数据,而第二种方式是让图表对BoxPlotSeries
系列进行计算。实现这项工作的方法是不是通过正常的数据绑定,而是使用Series BS = chart1.Series.Add("BoxPlotSeries");
BS.ChartType = SeriesChartType.BoxPlot;
BS.Points.Add(new DataPoint(55, 0));
BS.Points[0]["BoxPlotSeries"] = "S1";
自定义属性:
S1
创建一个包含50 DataPoints
的随机系列BoxPlot
后,我创建了一个x=55
系列,在Points
添加了一个点,并将该点与List
相关联3}}
结果如下:
通过常规绑定 BoxPlot
到您的Series
,您已经有效地选择了方法一,并看到多个 chartType Point, Line, Column
点。而是将Series
按照您的喜好设置为DataPoint
或您想要的样式;然后添加一个第二个 X-Value
一个 BoxPlot
,将与数据系列相关联,就像在我的代码示例中一样..
我选择了BoxPlot
,以便S1.Points.Count
点位于数据的右侧。如果您的数据没有有意义的数字X值,则会按顺序显示,您可以将Count + 1 or +2
点放在DataPoints
或BS["MinPixelPointWidth"] = "15";
BS["MaxPixelPointWidth"] = "25";
..
注意如果你有很多ChartArea
,那么BoxPlotPoint看起来会很薄,你几乎看不到它。
在这种情况下,如果你可以简单地扩大它就会很好。
有一组自定义属性,即
Custom property BoxPlotSeries
和,PointWidth和PixelPointWidth。
ChartArea A1 = chart1.ChartAreas[0];
Series S1 = chart1.Series[0];
A1.AxisX.Interval = 50;
ChartArea A2 = chart1.ChartAreas.Add("A2");
A2.AlignWithChartArea = "A1";
A2.AlignmentOrientation = AreaAlignmentOrientations.Horizontal;
A2.AlignmentStyle = AreaAlignmentStyles.PlotPosition;
A1.Position.Width *= 0.85f;
A2.Position.Y = A1.Position.Y;
A2.Position.X = A1.Position.Right;
A2.Position.Width = A1.Position.Width * 0.15f;
A2.AxisX.LabelStyle.ForeColor = Color.Transparent;
A2.AxisX.MajorGrid.Enabled = false;
A2.AxisX.MajorTickMark.Enabled = false;
A2.AxisX.Minimum = 0;
A2.AxisX.Maximum = 2;
A2.AxisY.Interval = 10;
A2.AxisY.Maximum = A1.AxisY.Maximum;
A2.AxisY.Minimum = A1.AxisY.Minimum;
Series BS = chart1.Series.Add("BoxPlotSeries");
BS.ChartArea = "A2";
BS.ChartType = SeriesChartType.BoxPlot;
BS.Points.Add(new DataPoint(1, 0));
DataPoint DPT = BS.Points[BS.Points.Count - 1];
DPT["BoxPlotSeries"] = "S1";
但您可能希望通过在放置BoxPlot系列的位置添加第二个 S1.Color = Color.SteelBlue;
S2.Color = Color.DarkKhaki;
...
DPT1.Color = chart1.Series["S1"].Color;
DPT2.Color = chart1.Series["S2"].Color;
来将BoxPlot点分开:
以下是用于上述屏幕截图的定位和样式调用:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string playerName;
int age;
int playerGender;
cout << "Are you a Lady or a Sir?" << endl;
cin >> playerGender;
if (playerGender = Lady)
{
cout << "So you're a girl. " << endl;
}
else if (playerGender = Sir)
{
cout << "So you're a boy." << endl;
}
cout << "What is your name " << playerGender << "?" << endl;
cin >> playerName;
cout << "What is your age?" << playerName << endl;
cin >> age;
if (age <= 10)
{
cout << "You're too young " << playerName << "! " << endl;
}
else if (age >= 11)
{
cout << "You are old enough to play" << playerName << ". " << endl;
通过添加第二个稍微更随机的数据系列和第二个boxplot点,您可以显示不同的分布:
请注意,您需要明确设置数据Series.Colors以允许为BoxPlot点引用它们。:
{{1}}