Строение разноцветного графика в Matlab

Я хотел бы построить вертикальный график (я предпочту любую ориентацию, но я был бы доволен просто вертикальным прямо сейчас) с двухцветными тире, скажите red-blue-red-blue-...

Я знаю, что мог сделать это как это:

plot([1,1],[0,1],'r'),
hold on,
plot([1,1],[0,1],'--b')

Однако, так как я должен смочь переместить строку среди других, она должна только иметь единственный дескриптор. Как я мог сделать это?

ОТРЕДАКТИРУЙТЕ Спасибо за свои ответы. Я предполагаю, что должен действительно дать еще некоторую информацию.

У меня есть некоторые данные, которые классифицированы в различные части. Я хочу смочь вручную скорректировать границы между классами. Для этого я провожу вертикальные линии на границах классификации и использовании, перемещаемом, чтобы позволить перемещать строки.

Для границы между красным и синим классом, я хотел бы иметь красную/синюю строку.

plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6)

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

К сожалению, перемещаемый не позволяет мне использовать несколько дескрипторов, и группировка строк с hggroup, кажется, не создает перемещаемый объект.

градиент признаков похож на многообещающий подход, но цвета радуги не будут работать на мое приложение.

14
задан Jonas 15 March 2010 в 03:32
поделиться

3 ответа

Вы можете использовать имеющийся у вас код и просто объединить дескрипторы из каждой строки в вектор дескрипторов. Если вы хотите изменить свойства обеих строк одновременно, функция SET может принимать вектор дескрипторов в качестве аргумента. Из документации для SET :

set (H, 'PropertyName', PropertyValue, ...) устанавливает для названных свойств указанные значения на объекте (ах) , идентифицированном H . H может быть вектором дескрипторов , и в этом случае set устанавливает значения свойств для всех объектов .

Вот пример:

h1 = plot([1 1],[0 1],'r');    %# Plot line 1
hold on;
h2 = plot([1 1],[0 1],'--b');  %# Plot line 2
hVector = [h1 h2];             %# Vector of handles
set(hVector,'XData',[2 3]);    %# Shifts the x data points for both lines



ОБНОВЛЕНИЕ: Поскольку вы упомянули, что используете перетаскиваемый из MathWorks File Exchange , вот альтернативное решение. Из описания draggable :

Функция, которая вызывается при перемещении объекта , может быть предоставлена ​​как необязательный аргумент , так что {{1} } движение вызывает дальнейшие действия.

Затем вы можете попробовать следующее решение:

  • Постройте две линии, сохранив дескриптор для каждой (например, h1 и h2 ).
  • Поместите дескриптор каждого в свойство 'UserData' другого:

     set (h1, 'UserData', h2); 
    set (h2, 'UserData' , h1); 
     
  • Создайте следующую функцию:

     function motionFcn (hMoving)% # Текущий дескриптор перемещения передается в 
    hOther = get (hMoving, 'UserData'); % # Получить другой дескриптор графика 
    set (hOther, 'XData', get (hMoving, 'XData'), ...% # Обновить данные x 
     'YData', get (hMoving, 'YData')); % # Обновить данные y 
    end 
     
  • Включите draggable для обеих строк, используя указанную выше функцию в качестве функции, вызываемой при перемещении любого объекта:

     draggable (h1, @ motionFcn); 
    draggable (h2, @ motionFcn); 
     
6
ответ дан 1 December 2019 в 15:12
поделиться

Я никогда не использовал его, но есть отправка от Себастьян Хёльц позвонил CLINE в Mathworks File Exchange, что кажется связанным.

3
ответ дан 1 December 2019 в 15:12
поделиться

Я не знаю, как сделать именно то, что вы хотите, но, по-видимому, причина, по которой вы хотите это сделать, состоит в том, чтобы каким-то образом отличить эту строку от других строк. Взгляните на документацию MathWorks по двумерным линейным графикам . В частности, этот пример:

plot(x,y,'--rs','LineWidth',2,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)

должен дать вам множество идей для вариаций. Если вам действительно нужны двухцветные штрихи, это может помочь указать, почему. Таким образом, даже если мы не сможем ответить на вопрос, возможно, мы сможем убедить вас, что вам на самом деле не нужны двухцветные штрихи. Поскольку вы уже исключили решение с перекрытием, я почти уверен, что не существует решения, которое бы отвечало всем вашим потребностям. Я предполагаю, что двухцветность - самая изменчивая из этих потребностей.

1
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: