2013-07-31 2 views
1

У меня есть диаграмма, которая показывает два разных значения Y для тех же значений DateTime X. Я рисую их с помощью Spline в той же области диаграммы с первичными и вторичными осями Y. График, кажется, работает правильно, за исключением того, что метки оси Y меняются местами. Ожидаемые первичные метки оси Y находятся на вторичной оси и наоборот.Осевые метки в диаграмме с использованием двух осей Y меняются на противоположные?

Кроме того, следует отметить, что диаграммы никогда не отображаются на экране, они сохраняются в виде файлов изображений в файловой системе и в базе данных с использованием метода chart.SaveImage.

Вот изображение выхода графика:

Dual Y-Axis Chart

Вот код, чтобы создать диаграмму:

// create the chart 
Chart chart = new Chart(); 
chart.Size = new Size(width, height); 
chart.AntiAliasing = AntiAliasingStyles.All; 

string datatype = data[0].DataType; 
string datatype2 = data2[0].DataType; 
SampleUnit unit = GetSampleUnit(data[0].Unit); 
string u = ""; 
if (unit != null) 
{ 
    u = unit.ShortName; 
} 
SampleUnit unit2 = GetSampleUnit(data2[0].Unit); 
string u2 = ""; 
if (unit2 != null) 
{ 
    u2 = unit2.ShortName; 
} 

var chartArea = new ChartArea(); 
chartArea.AxisX.LabelStyle.Format = "dd MMM\nHH:mm"; 
chartArea.AxisX.MajorGrid.LineColor = Color.LightGray; 
chartArea.AxisY.MajorGrid.LineColor = Color.LightGray; 
chartArea.AxisX.LabelStyle.Font = new Font("Calibri", 8); 
chartArea.AxisY.LabelStyle.Font = new Font("Calibri", 8); 
chartArea.AxisY2.LabelStyle.Font = new Font("Calibri", 8); 
chartArea.AxisY2.Enabled = AxisEnabled.True; 
chartArea.AxisY2.MajorGrid.Enabled = false; 
if (string.IsNullOrEmpty(u)) 
{ 
    chartArea.AxisY.Title = datatype; 
} 
else 
{ 
    chartArea.AxisY.Title = datatype + " (" + u + ")"; 
} 
if (string.IsNullOrEmpty(u2)) 
{ 
    chartArea.AxisY2.Title = datatype2; 
} 
else 
{ 
    chartArea.AxisY2.Title = datatype2 + " (" + u2 + ")"; 
} 
chartArea.AxisY.TitleForeColor = Color.MediumBlue; 
chartArea.AxisY2.TitleForeColor = Color.Red; 
chart.ChartAreas.Add(chartArea); 

var series = new Series(); 
series.Name = datatype; 
series.ChartType = SeriesChartType.Spline; 
series.XValueType = ChartValueType.DateTime; 
series.YValueType = ChartValueType.Double; 
series.YAxisType = AxisType.Primary; 
series.Color = Color.MediumBlue; 
chart.Series.Add(series); 

var series2 = new Series(); 
series2.Name = datatype2; 
series2.ChartType = SeriesChartType.Spline; 
series2.XValueType = ChartValueType.DateTime; 
series2.YValueType = ChartValueType.Double; 
series.Color = Color.Red; 
series.YAxisType = AxisType.Secondary; 
chart.Series.Add(series2); 

chart.Titles.Add(sensor.Name + " " + char.ToUpper(datatype[0]) + datatype.Substring(1) + " " + char.ToUpper(datatype2[0]) + datatype2.Substring(1)); 

// bind the datapoints 
chart.Series[datatype].Points.DataBindXY(data, "Timestamp", data, "Value"); 
chart.Series[datatype2].Points.DataBindXY(data2, "Timestamp", data2, "Value"); 

// draw! 
chart.Invalidate(); 

Итак, у меня есть два вопроса:

  1. Почему этикетки оси меняются на противоположную?
  2. Косметика: почему название оси помещает бар "|" в конце вместо закрывающей круглой скобки ")"? Является ли это просто визуальным артефактом для сохранения диаграммы в качестве изображения?

ответ

2

У вас есть разрез-н-паста опечатка

изменения

series.Color = Color.Red; 
series.YAxisType = AxisType.Secondary; 

в

series2.Color = Color.Red; 
series2.YAxisType = AxisType.Secondary; 
+0

Вы правильны, сэр. Я даже искал эту конкретную причину. Иногда вам просто нужен дополнительный набор глаз. Благодарю. – Psyfun

+0

Любые идеи по второй косметической проблеме? – Psyfun

+0

Я не знаю. Я думаю, что видел это раньше и предполагал, что это ошибка в MSChart. Я думаю, что это искажает изображение шрифта для ')'. –

Смежные вопросы