C#, DataVisualization.Charting: назначение пользовательских меток значениям на осях

В С# я использую библиотеку DataVisualization.Charting для построения графиков. На простом линейном графике я хотел бы показать некоторый пользовательский текст по оси X в позициях x = 0, 1, 2, 3.

Что-то вроде этого (в matplotlib): введите здесь описание изображения

Это — это документация для класса Axis, но я не уверен, что мне следует искать.


person Ricky Robinson    schedule 03.11.2014    source источник


Ответы (3)


Используйте AxisLabel свойство DataPoint. Описание свойства AxisLabel:

Получает или задает текст метки ось X для точки данных, ряда или пустой точки. Это свойство используется только в том случае, если для соответствующего объекта Axis не указана пользовательская метка.

Таким образом, ваш код может выглядеть так:

DataPoint dp1 = new DataPoint(1, 1);
dp1.AxisLabel = "Frogs";
DataPoint dp2 = new DataPoint(2, 4);
dp2.AxisLabel = "Hogs";
DataPoint dp3 = new DataPoint(3, 9);
dp3.AxisLabel = "Bogs";
DataPoint dp4 = new DataPoint(4, 6);
dp4.AxisLabel = "Slogs";
chart1.Series[0].Points.Add(dp1);
chart1.Series[0].Points.Add(dp2);
chart1.Series[0].Points.Add(dp3);
chart1.Series[0].Points.Add(dp4);

Или вы можете применить 1 = Frogs, 2 = Hogs, 3 = Bogs и 4 = Slogs с помощью следующего кода:

chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;    
chart1.Series[0].MarkerStyle = MarkerStyle.Circle;
chart1.Series[0].MarkerBorderColor = System.Drawing.Color.Black;
chart1.Series[0].MarkerColor = System.Drawing.Color.Red;
chart1.Series[0].Points.AddXY(1, 1);
chart1.Series[0].Points.AddXY(2, 4);
chart1.Series[0].Points.AddXY(3, 9);
chart1.Series[0].Points.AddXY(4, 6);
foreach (DataPoint dp in chart1.Series[0].Points)
{
    switch ((int)dp.XValue)
    {
        case 1: dp.AxisLabel = "Frogs"; break;
        case 2: dp.AxisLabel = "Hogs"; break;
        case 3: dp.AxisLabel = "Bogs"; break;
        case 4: dp.AxisLabel = "Slogs"; break;
    }
}

Чтобы добиться действительно того же, что и на картинке - оси с обеих сторон - вам нужно будет использовать следующий трюк.

Он работает только для оси X, для оси Y вы можете добавить собственные метки, как описано здесь.

Вы также можете использовать метки точек данных, которые отображаются внутри диаграммы, используя IsValueShownAsLabel.

person Vojtěch Dohnal    schedule 09.11.2014
comment
Спасибо за ваш ответ. Меня беспокоит одно: когда вы делаете dp.AxisLabel = "something", вы не указываете, к какой оси вы должны добавить метку. В документации, которую вы связали, говорится, что это для оси X. Что эквивалентно оси Y? Изображение в моем первом посте было просто примером, я подумал, что было бы просто адаптировать пример к моему случаю. :/ - person Ricky Robinson; 11.11.2014
comment
@RickyRobinson Отредактированный ответ - для оси Y нет эквивалента, добавлена ​​​​ссылка, как это сделать. - person Vojtěch Dohnal; 11.11.2014

Просто добавьте свои точки с этими метками в качестве значений x:

chart1.Series[0].Points.AddXY("Frogs", 1);
chart1.Series[0].Points.AddXY("Hogs", 4);
// etc

Или вы можете связать точки с помощью двух массивов:

string[] xvalues = new [] {"Frogs", "Hogs", "Bogs", "Slogs"};
int[] yvalues = new [] {1, 4, 9, 6};
chart1.Series[0].Points.DataBindXY(xvalues, yvalues);
person mmathis    schedule 03.11.2014
comment
Спасибо. Это выглядит достаточно просто, но кажется, что C# присваивает Frogs значение 1, Hogs — 2, Bogs — 3 и Slogs — 4 только потому, что именно в этом порядке я добавляю точки. В моем конкретном случае мне нужно нанести несколько точек, не обязательно с увеличением значений X. Как применить 1 = лягушки, 2 = свиньи, 3 = болота и 4 = утомительные? - person Ricky Robinson; 03.11.2014

Вам нужно установить свойство «Формат» LabelStyle на вашей оси.

См.: http://msdn.microsoft.com/en-us/library/system.web.ui.datavisualization.charting.labelstyle(v=vs.110).aspx

Есть несколько разумных руководств по использованию библиотеки диаграмм, если вы их ищете. Вот один из них: http://weblogs.asp.net/dwahlin/getting-started-with-the-asp-net-3-5-chart-control

person Deeko    schedule 03.11.2014
comment
Установка Format не изменит целое число на строку. - person mmathis; 03.11.2014
comment
Нет, не будет, но если вы привязываете одну коллекцию, а не добавляете/привязываете отдельные координаты x/y, это то, на что вам нужно обратить внимание. И если вы добавляете баллы вручную, зачем вообще вводить целые числа? - person Deeko; 03.11.2014
comment
Спасибо. Не могли бы вы привести пример, показывающий, как это работает? К сожалению, это свойство не используется в учебнике, на который вы ссылаетесь. - person Ricky Robinson; 03.11.2014
comment
Не могли бы вы предоставить мне пример, в котором я добавляю такие точки, как (2,0), (3,1), (0,3), (3, 4), (2, 5), и на оси X будут отображаться лягушки в позиции 1, свиньи в позиции 2 и так далее? - person Ricky Robinson; 06.11.2014