Merencanakan dengan dua sumbu independen di Matlab

Artikel ini akan bermanfaat bagi mereka yang menggambar grafik di lingkungan Matlab.

Ketika menyiapkan grafik untuk menerbitkan artikel dalam jurnal ilmiah dan berbagai jenis laporan, saya cukup sering menemukan kebutuhan untuk membangun beberapa kurva, masing-masing terkait dengan porosnya - agar tidak membebani artikel dengan grafik dan tidak melampaui batas mereka. Tetapi untuk ini, di Matlab sebelum versi R2014a hanya ada tim plotyy (X1, Y1, X2, Y2) , yang memiliki sejumlah fitur tidak menyenangkan, yang membuatnya perlu menggunakan program lain dan melakukan semuanya secara manual, yang, pertama, mempersulit proses ini dengan dari sudut pandang gaya tunggal, kedua, itu membutuhkan banyak waktu, dan ketiga, itu tidak memungkinkan untuk perubahan cepat.

Fitur dan deskripsi yang tidak menyenangkan
Untuk fitur yang tidak menyenangkan seperti itu saya akan atribut:

1. Kurangnya analog ditahan ("asli" ditahan tidak bekerja dengan benar dengan plotyy). Untuk menambahkan lebih dari 2 kurva, Anda perlu menggunakan konstruksi ini:

[hAx,hLine1,hLine2] = plotyy([x1',x2'],[y1' y2'],[x3',x4'],[y3',y4']); % 4  

Fitur yang tidak menyenangkan No. 2 mengikuti dari desain ini:

2. Dimensi array yang disertakan dalam tanda kurung harus sesuai, karena matriks elemen terbentuk dari mereka. Dalam praktiknya, ini jarang terjadi.

3. Desain serius menderita dari fakta bahwa Anda tidak dapat secara pemrograman mengubah warna dan jenis semua baris dalam satu baris, Anda hanya dapat memformat satu set garis yang terkait dengan sumbu tertentu (hLine1 dan hLine2) - dalam hal apa pun, saya tidak bisa. Pada saat yang sama, saya tidak berbicara tentang mengubah parameter dengan tangan, mis. mengedit di jendela "gambar" - hanya secara langsung dengan kode dalam file .m.

Meringkas di atas: plotyy () tidak sangat cocok untuk menampilkan beberapa set grafik untuk sumbu yang berbeda. Kecuali untuk dependensi sederhana seperti ini:

 x = linspace(0,10); y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*cos(10*x); y3 = 0.2*exp(-0.5*x).*cos(10*x); y4 = 150*exp(-0.05*x).*sin(x); X=[x',x']; Y1=[y1' y4']; Y2=[y2',y3']; [hAx,hLine1,hLine2] = plotyy(X,Y1,X,Y2); 



Entah tim yyaxes , yang muncul dalam versi Matlab R2014a. Di sini kita sekarang memiliki tempat untuk berbalik.

Saya ingin memberi tahu Anda tentang kesenangan tim ini menggunakan contoh saya sendiri. Tugas saya adalah saya perlu membuat satu profil profil grafik 3 suhu (solusi yang diperoleh dengan metode numerik langsung, metode momen dan nilai-nilai eksperimental) terkait dengan sumbu kanan, dan 3 profil tekanan terkait dengan sumbu kiri. Dan juga menambahkan panah dan keterangan.

Perintah yyaxis kiri dan yyaxis kanan memungkinkan Anda untuk mengatasi tugas ini sekaligus. Sebenarnya, apa intisari itu. Dalam satu gambar, kita dapat membuat sejumlah grafik dengan menautkannya ke salah satu sumbu. Dalam kerangka kerja masing-masing tim, semuanya bekerja sama seperti untuk jadwal reguler.

Struktur gambar dalam kasus ini akan terlihat seperti ini:

 figure() {     - , } yyaxis left { ,     - , , ,       } yyaxis right { ,     - , , ,       } 

Mengisi struktur ini dengan yang diperlukan, kami memperoleh sebagai hasilnya:



Kode program
 %     h = figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]); %  : F='Times New Roman'; FN='FontName'; FS='FontSize'; l=30;%   set(gca, FN, F, FS, l) box on %  hold on %%   yyaxis right hPlot_1 = plot(time*10^6, T); %    hPlot_2 =plot(time_exp_T*10^6, T_exp); %   hPlot_3 =plot(time_pk, T_pk); %   set( hPlot_1, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_2, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'o' ); set( hPlot_3, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([180 270]); %     () yticks([190 200 210 220 230 240 250 260 267]) yticklabels({'190', '200', '210', '220', '230', '240','250' '260', '\it T, K'}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   yyaxis left hPlot_10 = plot(time_P*10^6, P_p0); %    hPlot_11 = plot(time_exp_P_p0*10^6, P_p0_exp); %   hPlot_13 = plot(time_pk, Pp0_pk); %   set( hPlot_10, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_11, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'x' ); set( hPlot_13, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([0.1 0.8]); %     () yticks([0.2 0.3 0.4 0.5 0.6 0.7 0.77]) yticklabels({'0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '\it p/p_0 '}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   %      xticks([0 20 40 60 80 100 120 140 160 185]) xticklabels({'0' '20' '40' '60' '80' '100' '120' '140' '160', '\it X/U, c'}) %  text(20,0.3,'\leftarrow', FS, 60, FN, F); text(140,0.6,'\rightarrow', FS, 60, FN, F); text(160,0.24,'1', FS, l, FN, F); text(60, 0.25,'2', FS, l, FN, F); text(120, 0.2,'3', FS, l, FN, F); text(140,0.51,'4', FS, l, FN, F); text(80, 0.52,'5', FS, l, FN, F); text(120,0.48,'6', FS, l, FN, F); text(5,0.75,'\it D_2O - N_2', FS, l, FN, F); hold off 



Fitur tambahan lain dalam menyiapkan grafik untuk dicetak adalah penyimpanannya yang sederhana dan nyaman dalam format apa pun yang didukung oleh Matlab. Untuk melakukan ini, Anda hanya perlu menambahkan baris berikut:

 %%   file_name = strcat('T, p_p0 - mm, ch, exp'); %   saveas(h, file_name, 'bmp'); %  .bmp saveas(h, file_name, 'fig'); %  .fig saveas(h, file_name, 'eps'); %  .eps saveas(h, file_name, 'jpeg'); %  .jpeg close(h); %     


Ringkasan

Dimulai dengan versi R2014a, Matlab telah menjadi program yang cocok untuk mempersiapkan jadwal penerbitan artikel di berbagai jurnal ilmiah. Kelebihan penting adalah fleksibilitas yang sangat baik dari alat ini, yang memungkinkan Anda untuk memproses hasilnya dan menyajikannya dalam bentuk yang mudah dicerna dan indah, termasuk untuk apa yang disebut. Pemrosesan "batch".

Ada baiknya mengintip:

Artikel bermanfaat tentang grafik di Matlab
Deskripsi yyaxis

Deskripsi plotyy
Bagan Ekspor

Source: https://habr.com/ru/post/id403763/


All Articles