Problem with legend: colors don't match value of variable (2024)

조회 수: 22 (최근 30일)

이전 댓글 표시

LUCA D'AMBROSIO 2024년 7월 6일 8:53

  • 링크

    이 질문에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable

  • 링크

    이 질문에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable

댓글: Star Strider 2024년 7월 6일 14:13

채택된 답변: Star Strider

hello, i have a problem with the legend in this script: i am doing subplots for the two parameters e and t, in every subplot e is fixed while t can vary between 5 different values. the problem is the legend doesn't match the colors. for instance, t= -50 should be red, -25 green, 0 blue, 25 light blue and t = 50 black, but the legend doesnt say this. Could anybody give me any suggestions on how to index the color and the value of the parameter so that they match? thank you

here is the code:

clear; clc; clf;

n = 1001;

x = linspace(-100, 100, n);

y = linspace(-100, 100, n);

[X, Y] = meshgrid(x, y);

clr = ['r','g','b','c','k'];

a = 4;

e = [-50 -10 0 50];

t = linspace(-50, 50, 5);

LegendsStrings = cell(length(t),1);

for q = 1:a

for r = 1:5

Z = fn(X, Y, e(q), t(r), n);

subplot(2, 2, q)

xline(0, 'Color', 'k', 'LineWidth', 0.5);

yline(0, 'Color', 'k', 'LineWidth', 0.5);

hold on

v = [0, 0];

contour(X, Y, Z, v, 'LineWidth', 1.5, 'LineColor', clr(r))

xlabel('x')

ylabel('y')

title("e = " + e(q))

grid on

axis equal

hold off

LegendsStrings{r} = ['t = ', num2str(t(r))];

end

legend(LegendsStrings, 'Interpreter', 'none')

end

function Z = fn(X,Y,e,t,n)

Z = zeros(n, n);

B = X + Y + e + t;

D = X.*Y - e.*t;

for i= 1:n

for j= 1:n

if B(i,j) >= 0

Z(i,j) = D(i,j);

else

Z(i,j) = -1;

end

end

end

end

댓글 수: 1

이전 댓글 -1개 표시이전 댓글 -1개 숨기기

LUCA D'AMBROSIO 2024년 7월 6일 10:00

이 댓글에 대한 바로 가기 링크

https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204181

  • 링크

    이 댓글에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204181

update: i tried the following, now the colors match but the legend adds some unused lines

n = 101;

x = linspace(-100, 100, n);

y = linspace(-100, 100, n);

[X, Y] = meshgrid(x, y);

clr = ['r','g','b','c','k'];

a = 4;

e = [-50 -10 0 50];

t = linspace(-50, 50, 5);

LegendsStrings = cell(numel(t),1);

for q = 1:a

for r = 1:5

Z = fn(X, Y, e(q), t(r), n);

subplot(2, 2, q)

xline(0, 'Color', 'k', 'LineWidth', 0.5);

yline(0, 'Color', 'k', 'LineWidth', 0.5);

hold on

LegendsStrings{r} = ['t = ', num2str(t(r))];

v = [0, 0];

contour(X, Y, Z, v, 'LineWidth', 1.5, 'LineColor', clr(r), 'DisplayName', LegendsStrings{r})

xlabel('x')

ylabel('y')

title("e = " + e(q))

grid on

axis equal

hold off

% xp = [-95, -80];

% yp = (-30-12*r)*ones(1, 2);

% plot(xp, yp, ['-', clr(r)])

% text(xp(2)+5, yp(2),['t = ', num2str(t(r))],'FontSize',8)

end

legend()

end

Problem with legend: colors don't match value of variable (3)

댓글을 달려면 로그인하십시오.

이 질문에 답변하려면 로그인하십시오.

채택된 답변

Star Strider 2024년 7월 6일 11:00

  • 링크

    이 답변에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#answer_1481966

  • 링크

    이 답변에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#answer_1481966

MATLAB Online에서 열기

I can’t run this since ‘fn’ is missing.

n = 101;

x = linspace(-100, 100, n);

y = linspace(-100, 100, n);

[X, Y] = meshgrid(x, y);

clr = ['r','g','b','c','k'];

a = 4;

e = [-50 -10 0 50];

t = linspace(-50, 50, 5);

LegendsStrings = cell(numel(t),1);

for q = 1:a

for r = 1:5

Z = fn(X, Y, e(q), t(r), n);

subplot(2, 2, q)

xline(0, 'Color', 'k', 'LineWidth', 0.5);

yline(0, 'Color', 'k', 'LineWidth', 0.5);

hold on

LegendsStrings{r} = ['t = ', num2str(t(r))];

v = [0, 0];

hc(r) = contour(X, Y, Z, v, 'LineWidth', 1.5, 'LineColor', clr(r), 'DisplayName', LegendsStrings{r});

xlabel('x')

ylabel('y')

title("e = " + e(q))

grid on

axis equal

hold off

% xp = [-95, -80];

% yp = (-30-12*r)*ones(1, 2);

% plot(xp, yp, ['-', clr(r)])

% text(xp(2)+5, yp(2),['t = ', num2str(t(r))],'FontSize',8)

end

legend(hc, 'Location','best')

end

Unrecognized function or variable 'fn'.

That aside, I propose a solution, that being to create a handle to the contours you want, and then pass them to your legend call. (I will test this when ‘fn’ appears. In the interim, I leave that to you)

.

댓글 수: 4

이전 댓글 2개 표시이전 댓글 2개 숨기기

LUCA D'AMBROSIO 2024년 7월 6일 11:21

이 댓글에 대한 바로 가기 링크

https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204211

  • 링크

    이 댓글에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204211

i posted the function fn above.

i don't know if probably isnt visualized correctly, here i attach it again:

function Z = fn(X,Y,e,t,n)

Z = zeros(n, n);

B = X + Y + e + t;

D = X.*Y - e.*t;

for i= 1:n

for j= 1:n

if B(i,j) >= 0

Z(i,j) = D(i,j);

else

Z(i,j) = -1;

end

end

end

end

Star Strider 2024년 7월 6일 13:05

이 댓글에 대한 바로 가기 링크

https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204271

  • 링크

    이 댓글에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204271

MATLAB Online에서 열기

I just looked at the code in your Comment.

n = 101;

x = linspace(-100, 100, n);

y = linspace(-100, 100, n);

[X, Y] = meshgrid(x, y);

clr = ['r','g','b','c','k'];

a = 4;

e = [-50 -10 0 50];

t = linspace(-50, 50, 5);

LegendsStrings = cell(numel(t),1);

for q = 1:a

for r = 1:5

Z = fn(X, Y, e(q), t(r), n);

subplot(2, 2, q)

xline(0, 'Color', 'k', 'LineWidth', 0.5);

yline(0, 'Color', 'k', 'LineWidth', 0.5);

hold on

LegendsStrings{r} = ['t = ', num2str(t(r))];

v = [0, 0];

[~,hc{r}] = contour(X, Y, Z, v, 'LineWidth', 1.5, 'LineColor', clr(r), 'DisplayName', LegendsStrings{r});

% hc{r}

xlabel('x')

ylabel('y')

title("e = " + e(q))

grid on

axis equal

hold off

% xp = [-95, -80];

% yp = (-30-12*r)*ones(1, 2);

% plot(xp, yp, ['-', clr(r)])

% text(xp(2)+5, yp(2),['t = ', num2str(t(r))],'FontSize',8)

end

% legend([hc{:}], 'Location','best')

if q == a

hl = legend([hc{:}]);

end

end

sppos = [subplot(2,2,2).Position; subplot(2,2,4).Position];

lpos = hl.Position;

hl.Position = [sppos(1,1)+sppos(1,3) mean(sppos(:,2))+sppos(1,4)*0.25 lpos(3)*0.85 lpos(4)];

Problem with legend: colors don't match value of variable (7)

function Z = fn(X,Y,e,t,n)

Z = zeros(n, n);

B = X + Y + e + t;

D = X.*Y - e.*t;

for i= 1:n

for j= 1:n

if B(i,j) >= 0

Z(i,j) = D(i,j);

else

Z(i,j) = -1;

end

end

end

end

This appears to elilminate the extraneous llines. I did my best to get the legend to be narrower so that it fits, however the third position argument to it (‘width’) does not appear to be working correctly here. (It may work correctly in your code.)

.

LUCA D'AMBROSIO 2024년 7월 6일 14:12

이 댓글에 대한 바로 가기 링크

https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204311

  • 링크

    이 댓글에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204311

thank you very much, it works very well. thank you

Star Strider 2024년 7월 6일 14:13

이 댓글에 대한 바로 가기 링크

https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204316

  • 링크

    이 댓글에 대한 바로 가기 링크

    https://kr.mathworks.com/matlabcentral/answers/2134971-problem-with-legend-colors-don-t-match-value-of-variable#comment_3204316

As always, my pleasure!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

이 질문에 답변하려면 로그인하십시오.

참고 항목

카테고리

MATLABGraphicsFormatting and AnnotationLabels and AnnotationsLegend

Help CenterFile Exchange에서 Legend에 대해 자세히 알아보기

태그

  • legend
  • colorstring
  • indexing
  • plot
  • subplot
  • color

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

오류 발생

페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.


Translated by Problem with legend: colors don't match value of variable (10)

Problem with legend: colors don't match value of variable (11)

웹사이트 선택

번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:

또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.

미주

  • América Latina (Español)
  • Canada (English)
  • United States (English)

유럽

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

아시아 태평양

  • Australia (English)
  • India (English)
  • New Zealand (English)
  • 中国
  • 日本Japanese (日本語)
  • 한국Korean (한국어)

지역별 지사에 문의

Problem with legend: colors don't match value of variable (2024)
Top Articles
Latest Posts
Article information

Author: Trent Wehner

Last Updated:

Views: 6646

Rating: 4.6 / 5 (76 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Trent Wehner

Birthday: 1993-03-14

Address: 872 Kevin Squares, New Codyville, AK 01785-0416

Phone: +18698800304764

Job: Senior Farming Developer

Hobby: Paintball, Calligraphy, Hunting, Flying disc, Lapidary, Rafting, Inline skating

Introduction: My name is Trent Wehner, I am a talented, brainy, zealous, light, funny, gleaming, attractive person who loves writing and wants to share my knowledge and understanding with you.