Может ли контурный график MATLAB выглядеть так же, как у Mathematica? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь построить контурный график, сгенерированный Mathematica, и повторить это в MATLAB.

Код MATLAB:

bx = readmatrix('BX X,Z.xlsx');
bz = readmatrix('BZ X,Z.xlsx');
B=sqrt(bx.^2+bz.^2);

x=-12.4:0.5:12.6;
y=24:-2:0;
[Y,X]=meshgrid(x,y);
%surf(Y,X,transpose(B));
%hold on;

contour(Y,X,transpose(B),'fill','on');
%colormap(parula(18));
xlabel('X-axis');
ylabel('Z-axis');
zlabel('B-value');
title('the value of B data');
colorbar;

Это приводит к следующему рисункукоторая выглядит как перевернутая радуга.Matlab Output. It looks like a rainbow.

Ожидаемый результат - график, подобный следующему от Mathematica: Mathematica expected code

Код Mathematica , сгенерировавший желаемую фигуру, приведен ниже.

dataBx = Import["BvsY_1207.xlsx"] [[1]];
dataBz = Import["BvsY_1207.xlsx"] [[2]];
dataBz = dataBz + .06;
ClearAll[Bx, Bz, x, z];
listx = Range[0, 25, 0.5];
listx = listx - 12.4;
x = Transpose[Table[listx, {i, 13}]];
listy = 12 - Range[0, 24, 2];
y = Table[listy, {i, 51}];
dataB = Sqrt[dataBx^2 + dataBz^2];
B = Transpose[{Flatten[y], Flatten[x], Flatten[dataB]}];
ListContourPlot[B, InterpolationOrder -> 4, Contours -> 18, 
 ContourLines -> False, 
 BaseStyle -> {FontFamily -> "Times", FontSize -> 24}, 
 FrameLabel -> {"Y/mm", "X/mm", "" , "" }, PlotLegends -> Automatic]

Исходные данные: Файлы Excel для кода Matlab

1 Ответ

2 голосов
/ 11 июля 2019

Вы можете определить собственную цветовую карту и количество различных цветов для каждой области контурного графика. Я просто взял 6 цветов из сюжета Mathematica и экстраполировал их на 20 точек.

matlab contour plot with a custom interpolated color map

% custom color map
cm = [41  85 141;
     100 112 149;
     168 135 109;
     231 163  82;
     245 197 122;
     255 236 181]/255;

k = 6; %number of custommap points
n = 20; %number of filled areas on the plot
ls = linspace(1, k, n);

% interpolation of the color map for n elements
cm_int = horzcat(interp1(1:k, cm(:, 1)', ls)', interp1(1:k, cm(:, 2)', ls)', interp1(1:k, cm(:, 3)', ls)');

B=sqrt(bx.^2+bz.^2);

x=-12.4:0.5:12.6;
y = 0:2:24;
[Y,X]=meshgrid(x,y);

[C,h] = contourf(Y,X,transpose(B), n);
set(h,'LineColor','none')

xlabel('X-axis');
ylabel('Z-axis');
zlabel('B-value');
title('the value of B data');
colormap(cm_int);
colorbar;
...