2013-03-14 9 views
5

Nella mia applicazione ho 2 grafici, uno sopra l'altro sull'interfaccia utente (come in più vicino alla parte superiore del monitor). Gli assi orizzontali di entrambi i grafici si riferiscono allo stesso intervallo di tempo. I loro assi verticali possono essere molto diversi però, quindi voglio tenerli come grafici. Offrono informazioni complementari e, in quanto tali, mi piacerebbe mantenere i loro assi orizzontali sincronizzati, anche se le loro etichette degli assi verticali dovessero spostarsi.Allineamento degli assi verticali della carta tra 2 oggetti grafici

In entrambi i casi, i controlli del grafico che contengono questi hanno la stessa larghezza, solo i dati all'interno sono spostati.

Al momento ho questo:

10000| 
8000| 
6000| 
4000| 
2000| 
    0 --------------------------------- 
     0        10 

Long Label 3| 
Long Label 2| 
Long Label 1| 
Long Label 0 ----------------------- 
      0     10 

E voglio che questo:

 10000| 
     8000| 
     6000| 
     4000| 
     2000| 
      0 --------------------------------- 
      0        10 

Long Label 3| 
Long Label 2| 
Long Label 1| 
Long Label 0 --------------------------------- 
      0        10 

Furono Chart Controls MSChart originariamente separati. Ho provato a metterli nello stesso controllo grafico delle diverse aree del grafico, ma non ha risolto il problema.

Come posso ottenere questo risultato? Preferirei preferirli su controlli grafici separati, ma potrei accontentarmi di aree Chart separate se necessario.

risposta

3

Alla fine ho trovato una risposta. Mi piacerebbe comunque in diversi controlli grafici, tuttavia, se sono aree di grafico diverse nello stesso controllo grafico, è possibile utilizzare la proprietà ChartArea.AlignWithChartArea.

//Say We have 2 Chart areas, one named "Main Info" and the other "Supplemental" 
chart1.ChartAreas["Supplemental"].AlignWithChartArea = "Main Info"; 
chart1.ChartAreas["Supplemental"].AlignmentOrientation = AreaAlignmentOrientations.Vertical; 
chart1.ChartAreas["Supplemental"].AlignmentStyle = AreaAlignmentStyles.All; 

E questo li allineerà come volevo.

2

È una risposta tardiva, ma scrivi per chi vuole questa risposta.
La mia risposta sta usando un altro grafico.

double x_position = chart1.ChartAreas[0].AxisX.ScaleView.Position; 
double x_size = chart1.ChartAreas[0].AxisX.ScaleView.Size; 
chart2.ChartAreas[0].AxisX.ScaleView.Zoom(x_position, x_position + x_size);  

Per la sincronizzazione in tempo reale, utilizzare questo codice nell'evento grafico AxisViewChanged.

2

Per tempo reale CharArea multipla sincro come Temp detto:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e) 
{ 
    foreach (var charArea in chart1.ChartAreas) 
    { 
     if (charArea != e.ChartArea) 
     { 
      double x_position = e.ChartArea.AxisX.ScaleView.Position; 
      double x_size = e.ChartArea.AxisX.ScaleView.Size; 
      charArea.AxisX.ScaleView.Zoom(x_position, x_position + x_size);  
     }     
    }    
} 
Problemi correlati