plotの線の色を途中で変更する
조회 수: 68 (최근 30일)
이전 댓글 표시
プロットをする際に、下図のように、データの途中で線の色を変更することは可能でしょうか
댓글 수: 0
답변 (3개)
Kojiro Saito
2023년 8월 26일
xとyでデフォルトの色の範囲と色を変えたい範囲に分割してプロットする方法で実現できます。
x = 0:5;
y = 0:2:10;
plot(x([1:3, 5:6]), y([1:3, 5:6]), '-o', x(3:5), y(3:5), '-or')
2回のplotに分けることもできます。1回目のプロットの後hold onで追記するモードにし、2回目のプロットをおこないます。hold offで追記モードをオフにします。
x = 0:5;
y = 0:2:10;
plot(x([1:3, 5:6]), y([1:3, 5:6]), 'Marker', 'o')
hold on
plot(x(3:5), y(3:5), 'Marker', 'o', 'Color', 'r')
hold off
あるいは最初に全てのプロットをデフォルトの色(青)で描いてしまってから、指定した範囲だけ赤色の線を上書きする方法もあります。
x = 0:5;
y = 0:2:10;
plot(x, y, 'Marker', 'o')
hold on
plot(x(3:5), y(3:5), 'r')
hold off
댓글 수: 0
交感神経優位なあかべぇ
2023년 8월 26일
plotでは線の途中で変えられませんが、patchでは線の色を途中で変えられます。
ただし、patchは多角形を作成する関数ですので、面の色や最後の辺を透明にする必要があります。
x = [0,1,2,3,4,5];
y = [0,2,4,6,8,10];
redIdx = [3,4];% 赤のラインにする配列インデックス
FaceVertexCData = repmat([0,0,1],length(x),1); %色の設定
FaceVertexCData(redIdx,:) = repmat([1,0,0],length(redIdx),1);%線の一部だけ赤にする
FaceVertexAlphaData = ones(length(x),1);% 辺の透明度の設定
FaceVertexAlphaData(end) = 0; %最後の辺だけ透明にする。
patch(x,y,[1,1,1],... 面の色は透明にするので適当に設定
'Marker', 'o',... データがある点にoのマークをつける
'FaceAlpha',0,... 面を透明にする
'EdgeColor','flat',... EdgeColor(辺の色)はFaceVertexCDataの指定に従う
'FaceVertexCData', FaceVertexCData,... 辺に色をつける
'EdgeAlpha', 'flat',... EdgeAlpha(辺の透明度)はFaceVertexAlphaDataの指定に従う
'FaceVertexAlphaData', FaceVertexAlphaData); % 最後の辺だけ色を透明にする。
Hiroshi Iwamura
2023년 8월 26일
편집: Hiroshi Iwamura
2023년 8월 26일
for ループが必要ですが、区間ごとに描いて描画カラー順を指定する手もあります。
x = [0,1,2,3,4,5];
y = [0,2,4,6,8,10];
C = colororder;
colororder([C(1,:); C(1,:); C(2,:); C(2,:)]);
% ax = axes;
% ax.ColorOrder = ([C(1,:); C(1,:); C(2,:); C(2,:)]); % これでも可
hold on
for k=1:length(x)-1
plot(x(k:k+1), y(k:k+1),'-o')
end
hold off
colororder / ax.ColorOrder は、描いた後でも変えられます。
指定できるのは7種類までです。
同様にラインスタイル等も繰り返しパターン順を指定できます。
R2023a からは、更新順を色を優先するかラインスタイルを優先するか選べるようになりました。
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 グラフィックス オブジェクトのプログラミング에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!