2012-08-03 21 views
5

İçinde birkaç eğri bulunan bir ZedGraphControl var ve bazı sabit x konumlarına dikey çizgiler eklemek istiyorum. Çizgiler elbette sadece gerçek grafik alanı içinde olmalıdır.LineObj issue ile ZedGraph dikey çizgiler

Ben

LineObj line = new LineObj(Color.Black, xPos, myPane.YAxis.Scale.Min, xPos, myPane.YAxis.Scale.Max); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 
myPane.GraphObjList.Add(line); 

aşağıdaki çalıştı ve bu (aynı zamanda kesik olmadığını fark aşağıdaki resim bağlantıya bakınız kullanıcı grafiğini yakınlaştırır kadar dikey çizgiler sonra gerçek grafik alanının dışına uzanacaktır çalışıyor grafik içinde, garip).

http://imageshack.us/photo/my-images/196/zedgraphzoom.png/

veya (yalnızca geçerli zum myPane.Xaxis.Scale.Min ve Max olsun ve sonra ZoomEvent grafiği güncellemek? Aa yolu olsaydı) bu çözmenin bir yolu var mı Bu amaç için LineObj dışında kullanılabilecek daha iyi sınıflar/yöntemler var mı?

cevap

2

yerine LineObj tanımlama, bir LineItem tanımlar ve GraphPane.CurveList ekleyin: yakınlaştırma veya line pozisyon olacaktır pan yaparken böylece bu, grafik bölmesinde koordinat sistemine line bağlanan

LineItem line = new LineItem(String.Empty, new[] { xPos, xPos }, 
       new[] { myPane.YAxis.Scale.Min, myPane.YAxis.Scale.Max }, 
       Color.Black, SymbolType.None); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.CurveList.Add(line); 

hala grafikte sınırlanmış olabilir. Tabii ki, line'un y değerlerini güncellemeden uzaklaştırırsanız, line uçları grafik içinde olacaktır.

Kişisel deneyimlerimden Zedgraph'ta çok önemli bir sorun olabileceğini biliyorum; Ancak, bir LineItem eklerken tire düzgün görüntüleniyor gibi görünüyor.

+0

İşleri() afterwords, bu durumda altta marjı katacak, ama satırları ekleyerek arama yapmadan önce bunu gerektirir her şeyi yapabilirsiniz sanırım. Teşekkür ederim! – HischT

+2

Bir çözüm ikincil bir Y ekseni oluşturmak, ardından scale.max ve min değerini hem 0'a hem de 1'e koymak, sonra da LineItem'i iki nokta (x, 0) ve (x, 1) ile birleştirmektir. Bu şekilde, diğer eksenden bağımsız kalır. – Larry

2

CurveItem yerine bir LineObj kullanarak iyi bir yoldaydınız.

Location yapısına ve CoordinateFrame özelliğine bakın. Bunun yerine (

XScaleYChartFraction için CoordinateFrame "alt" ve grafik bölmesinin "üst" terimi, Y gibi 0d ve 1d kullanımı sağlar ayarlama X ve/veya Y için farklı bir koordinat sistemi kullanmasına olanak X, X Ekseni ölçeği koordinat sistemini kullanmaya devam ederken YAxis.Scale.Min ve YAxis.Scale.Max öğesinin).

Bu, .AxisChange(), yakınlaştırmayı, kaydırmayı ve LineObj öğesinin Y ekseninin ölçek değişikliklerini etkilemeyeceği anlamına gelir! İyi sürece zedGraphControl.AxisChange dont arama olarak

var line = new LineObj(Color.Black, xPos, 0, xPos, 1); 

line.Location.CoordinateFrame = XScaleYChartFraction; // This do the trick ! 
line.IsClippedToChartRect = true; 

line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.GraphObjList.Add(line); 
+0

Bu, bir LineItem eklemekten daha iyi bir yol gibi görünüyor, çünkü dikey çizgiler kavramsal olarak veri eğrilerinden farklıdır. – ricovox

+0

Görevim sonunda bitti. – KDecker