Colors of Scatter Plot don't match Legend
4 ビュー (過去 30 日間)
古いコメントを表示
I noticed that my scatter plot colors don't match the legend using Matlab R2017A. I was wondering why this might be the case. I was thinking it was because it was a held plot with multiple scatters, so it was reusing the colour scheme but I'm not sure how to prevent this issue. I've attached an image and the code below :
% %2P Derivation
weibullparameters_field=wblfit(Damage_FieldMileageTotal);
WeibullScale_Field=weibullparameters_field(1);
WeibullSlope_Field=weibullparameters_field(2);
%Generation of Field Data with random 2P
CustomerSample=wblrnd(WeibullScale_Field,WeibullSlope_Field,numsamples,1);
Damage_CustomerSample_atTestSeverity=prctile(CustomerSample,TestSeverity*100);
WeibullScale_TestInit=Damage_CustomerSample_atTestSeverity*WeibullSlope_Test/WeibullSlope_Field;
%Initial Test Sample Generation
TestSample1=wblrnd(WeibullScale_TestInit, WeibullSlope_Test,numsamples,1);
Reliability=sum(TestSample1>Damage_CustomerSample_atTestSeverity)/numsamples;
BinWidth=range([CustomerSample;TestSample1])/200;
TestSampleCounts=histcounts(TestSample1,'BinWidth',BinWidth);
CustomerSampleCounts=histcounts(CustomerSample,'BinWidth',BinWidth);
h1=scatter(0:BinWidth:max(CustomerSample),CustomerSampleCounts);
hold on;
h2=scatter(0:BinWidth:max(TestSample1),TestSampleCounts);
xlabel('Damage')
ylabel('Counts')
i=2;
legendInfo{1}=['1'];
legendInfo{2}=['2'];
while (abs(Reliability-TestRelNum)/TestRelNum>1E-4)
TestSample=wblrnd(WeibullScale_TestInit, WeibullSlope_Test,numsamples,1);
Reliability=sum(TestSample>Damage_CustomerSample_atTestSeverity)/numsamples;
i=i+1;
TestSampleCounts=histcounts(TestSample,'BinWidth',BinWidth);
h3=scatter(0:BinWidth:max(TestSample),TestSampleCounts);
if (mod(i,50)~=0)
set(h3,'Visible','off')
end
legendInfo{i}=[num2str(i)];
if (Reliability>TestRelNum)
WeibullScale_TestInit=WeibullScale_TestInit-5E-6;
ScaleParDir='Weibull Scale Parameter is decreasing';
else
WeibullScale_TestInit=WeibullScale_TestInit+5E-6;
ScaleParDir='Weibull Scale Parameter is increasing';
end
end
legend([legendInfo(1:2) legendInfo(50:50:end)]);
0 件のコメント
回答 (1 件)
Walter Roberson
2018 年 1 月 26 日
legend entries get grayed out like that when the corresponding line has 'visible', 'off'
It is not obvious to me why 50 or 100 would be visible off but that the real items that are not visible do not show up. How are you invoking legend() ?
2 件のコメント
Walter Roberson
2018 年 1 月 29 日
Just as I suspected. legend() by default associates text legends with graphics handles in the order the handles were created. You are creating a whole bunch of scatter plots and then setting all but every 50th to be invisible, but the handles still exist. You are providing four text entries to legend(), so it labels the first four handles it finds, two of which have useful data, and the next two of which are the first two entries that you created but set to invisible.
I am at a loss as to why you are creating those graphics handles just to make them invisible. It seems to me it would make more sense to have the scatter() itself within the if body so that you only create scatter plots for what will be visible.
参考
カテゴリ
Help Center および File Exchange で Legend についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!