我目前正在研究創建圖表以顯示數據的模塊。我使用System.Windows.Forms.DataVisualization.Charting.Chart。如何在指向某些數據的圖表中添加箭頭
我有兩條帶狀線顯示我們得到的平均結果和另一個顯示我們想要的結果。
到目前爲止,我對我所擁有的東西非常滿意,但我想添加明確的箭頭指向這些行。我無法弄清楚如何去做。
我看到Line Annotation可能有幫助,但我找不到想要的方法。
這裏是我想要做什麼的例子:
我目前正在研究創建圖表以顯示數據的模塊。我使用System.Windows.Forms.DataVisualization.Charting.Chart。如何在指向某些數據的圖表中添加箭頭
我有兩條帶狀線顯示我們得到的平均結果和另一個顯示我們想要的結果。
到目前爲止,我對我所擁有的東西非常滿意,但我想添加明確的箭頭指向這些行。我無法弄清楚如何去做。
我看到Line Annotation可能有幫助,但我找不到想要的方法。
這裏是我想要做什麼的例子:
你必須使用
在這兩種情況下,挑戰是獲得職位沒錯。
更自然的方式去使用Annotations
,所以讓我們來看看這首:
有多種類型,但不同的能力;文字可以通過RectangleAnnotation
或TextAnnotation
顯示。線條和箭頭只能由LineAnnotations
顯示。所以我們需要一對Line
- 加上TextAnnotation
爲你的兩條線。
像許多其他圖表元素註釋位於百分比其各自的容器;這有時使事情變得棘手。
要將線條註釋全部放在圖表的右側,您可以將其X
屬性設置爲100
;讓它進入左邊,將寬度設置爲負數。問題在此之後開始..
要找出ChartArea
的右邊緣在哪裏,您需要編碼Pre- or PostPaint
事件並使用ToRectangleF
方法。
要找出y值,您需要從數據值;爲此,可以使用AxisY.ValueToPixelPosition
方法轉換爲像素,從中可以使用圖表的ClientArea
以及ChartArea
百分比大小來計算百分比。
複雜嗎?對。 Annotations
得到很多簡單的使用,如果你可以錨他們到一定DataPoint
;但你的是在ChartArea
之外..
這裏是一個函數進行計算時,應該幫助:
double PercentFromValue(Chart chart, ChartArea ca, double value)
{
Axis ay = ca.AxisY;
RectangleF car = ca.Position.ToRectangleF();
double py = ay.ValueToPixelPosition(value);
int caHeight = (int)(chart.ClientRectangle.Height * car.Height/100f);
return 100d * py/caHeight;
}
注意,從所謂的Pre/PostPaint
事件時,它只會可靠工作..
所以這是一個例子一個PrePaint
事件定位一個LineAnnotation lAnn
:
private void chart1_PrePaint(object sender, ChartPaintEventArgs e)
{
Rectangle cr = chart1.ClientRectangle;
ChartArea ca = chart1.ChartAreas[0];
RectangleF car = ca.Position.ToRectangleF();
lAnn.Width = car.Width - lAnn.X;
lAnn.Y = PercentFromValue(chart1, ca, someDataValue);
}
當你插入一個有效數據點y值的ST arting y-position將被設置。您可以使用它,直到找到設置四個位置屬性的完美組合。
當創建並添加四個(!)註釋時,您可能希望保留類級別引用,所以您不必引用他們從註釋集合..
對於LineAnnotation
你將要設置線寬,顏色和capstyle,無論是使用EndCap
或StartCap
:
lAnn.EndCap = LineAnchorCapStyle.Arrow;
GDI +繪圖更直接,只要您知道要在哪裏繪製線條和文本。
它還在預製事件後,再次使用ValueToPixelPosition找到兩條數據線的pixelposition ..除此之外都是平常的東西用Graphics.DrawLine
,具有Pen
和Start- or EndCap
和Graphics.DrawString
也許TextRenderer.DrawText
。 。
我坦率地不知道我會選擇哪種方式..
創建三角形圖像,並設置標記圖像爲:
Chart1.Series.Points.AddXY(0, 10);
Chart1.Series.Points.AddXY(20,10);
Chart1.Series[0].Points[1].MarkerImage = "TriangleImage.bmp";
Chart1.Series[0].Points[1].MarkerImageTransparentColor = Color.White;
or
Chart1.Series[0].Points[1].MarkerStyle = MarkerStyle.Triangle;
你的意思你想要將箭頭添加到兩條彩色線條,還是希望將兩條黑色箭頭線條與文本相加? – TaW
兩個黑色箭頭線與文本。 – drov