Заполнение области построения для предотвращения усечения символов. (Основной Сюжет)

#swift #objective-c #core-plot

Вопрос:

В Core Plot для iOS есть ли способ добавить какое-либо дополнение к области участка, в отличие от рамки области участка? При использовании символов графика символы могут быть усечены, если они попадают на линию оси или границу кадра. По общему признанию, я понимаю, почему это происходит при построении круга ненулевого размера в качестве символа данных, но мне любопытно, есть ли способ добавить некоторые отступы, чтобы предотвратить это.

Или, может быть, есть способ сделать это с диапазонами осей, но если это так, я не придумал волшебную комбинацию, кроме создания диапазонов осей, которые «волшебным образом» достаточно велики, чтобы учитывать размер этих символов.

На прикрепленном скриншоте ось x представляет неделю. Любая точка данных за первый день будет усечена, потому что она рисуется прямо по оси y. В идеале я бы хотел, чтобы эта точка данных была нарисована просто «немного внутри». (Что на самом деле означает, что я хочу, чтобы диапазон по оси x увеличился ровно настолько, чтобы учесть это.)

Аналогично и для оси y. Значение «0» отображается прямо на оси x.

Я действительно не хочу, чтобы ось отображала диапазон шире, чем требуется (т. Е. Я не хочу, чтобы ось y, например, была равна -1).

Спасибо.

введите описание изображения здесь

Ответ №1:

Вот пример кода из демо-версии «Контрольная диаграмма» в приложении Пример галереи графиков:

 // Adjust visible ranges so plot symbols along the edges are not clipped
CPTMutablePlotRange *xRange = [[plotSpace.xRange mutableCopy] autorelease];
CPTMutablePlotRange *yRange = [[plotSpace.yRange mutableCopy] autorelease];

x.orthogonalCoordinateDecimal = yRange.location;
y.orthogonalCoordinateDecimal = xRange.location;

x.visibleRange = xRange;
y.visibleRange = yRange;

x.gridLinesRange = yRange;
y.gridLinesRange = xRange;

[xRange expandRangeByFactor:CPTDecimalFromDouble(1.05)];
[yRange expandRangeByFactor:CPTDecimalFromDouble(1.05)];
plotSpace.xRange = xRange;
plotSpace.yRange = yRange;
 

Вы можете настроить коэффициент расширения по мере необходимости в зависимости от размера графика и символов графика.

Комментарии:

1. Спасибо, Эрик, это определенно работает. Можете ли вы немного объяснить, почему это работает? Как можно расширить диапазон, чтобы точки данных оставались правильными без каких-либо изменений с моей стороны? И, если уж на то пошло, почему мои пользовательские метки более или менее работают, но если я увеличу коэффициент расширения, то метки начнут действительно громоздиться.

2. visibleRange Ограничивает ту часть оси, которая фактически нарисована, и gridLinesRange делает то же самое для линий сетки. Мы расширяем диапазоны графиков, чтобы сделать область графика (слой, содержащий весь чертеж графика) достаточно большой, чтобы содержать символы, которые висят за пределами осей.

3. @EricSkroch #Разброс Я создал пользовательские метки оси Y (0,50,100,150,200,250,300), и соответствующие значения точек данных 18.63, 29.32, 24.31, 33.68, 136.23, 128.44, 126.20 и создали ось X как (Пн, ….СОЛНЦЕ) и рассмотрим соответствующие точки данных (0,1,2…6). Всего мы набираем 7 очков. Но вручную я дал расстояние менее 50 (основная длина), чтобы все метки y отображались без прокрутки графика. Я сталкиваюсь с соответствующими точками значений данных y, которые не лежат относительно положения меток y. dl.dropboxusercontent.com/u/186007808/ScreenShotDescription.png

4. @HimanshuAgnihotri Задайте новый вопрос вместо того, чтобы комментировать вопрос, которому больше года. Нам потребуется более подробная информация о вашем коде, чем вы можете указать в комментарии.

5. @EricSkroch: Я думаю, что это можно было бы решить с помощью комментариев. Я здесь снова объясняю вам это: В основном я создал пользовательские метки для оси X,оси Y, и если я создам метки оси Y (0,50,100…..300) через majorIntervalLength (=50) вместо пользовательских. Это займет огромное пространство, и все значения меток не будут отображаться на экране. Поэтому я создал их как пользовательские, указав их значение местоположения галочки. Но уважаемые значения данных y рисуют график, учитывая 50 (основная длина). Как показано на рисунке с их исходной точкой X,Y на графике. Вы можете сопоставить положение Y по отношению к значению метки Y.

Ответ №2:

Только это решило для меня, значения правильно выровнены с обеих сторон(ведущие и пробные)

 [xRange expandRangeByFactor:[NSNumber numberWithDouble:1.2]];