Pertanyaan Matlab: Bagaimana cara mendapatkan semua tangkai pegangan dalam gagang angka?


Bagaimana cara mendapatkan semua tangkai pegangan dalam gagang angka?

Mengingat pegangan angka hfSaya menemukan itu get(hf, 'children') dapat mengembalikan gagang semua sumbu. Namun, Bantuan Matlab menunjukkan bahwa itu mungkin mengembalikan lebih dari sekedar tangkai kapak:

Anak-anak sosok itu. Sebuah vektor yang berisi pegangan semua sumbu, objek antarmuka pengguna yang ditampilkan dalam gambar. Anda dapat mengubah urutan pegangan dan dengan demikian mengubah tumpukan objek pada layar.

Apakah ada cara untuk mendapatkan hanya pegangan sumbu di gagang gambar? Atau bagaimana saya tahu jika pegangannya kembali get(hf, 'children') adalah pegangan kapak?

Terima kasih!


32
2017-10-14 23:21


asal


Jawaban:


Menggunakan TEMUKAN SEMUA:

allAxesInFigure = findall(figureHandle,'type','axes');

Jika Anda ingin menangani semua kapak di mana saja di Matlab, Anda dapat melakukan hal berikut:

allAxes = findall(0,'type','axes');

EDIT

Untuk menjawab bagian kedua dari pertanyaan Anda: Anda dapat menguji apakah daftar pegangan adalah sumbu dengan mendapatkan pegangan type milik:

isAxes = strcmp('axes',get(listOfHandles,'type'));

isAxes akan berlaku untuk setiap pegangan yang bertipe axes.

EDIT2

Untuk memilih hanya sumbu yang bukan legenda, Anda perlu membersihkan daftar sumbu (ax menangani dengan menghapus semua pegangan yang tidak memiliki tag 'legend' atau 'Colorbar':

axNoLegendsOrColorbars= ax(~ismember(get(ax,'Tag'),{'legend','Colobar'}))

31
2017-10-14 23:32



Solusi Jonas tidak berhasil untuk saya, karena ada beberapa pegangan yang mengacu pada legenda. Anehnya, legenda tampaknya diimplementasikan sebagai sumbu, setidaknya di Matlab 2010a. Ini adalah solusi jika Anda hanya menginginkan kapak, bukan legenda atau hal-hal lain.

axesHandles = get(fig, 'Children');
classHandles = handle(axesHandles);
count = length(axesHandles);
isNotInstanceOfSubtype = false(1, count);
for i = 1:count
    isNotInstanceOfSubtype(i) = strcmp(class(classHandles(i)), 'axes') == 1;
end
axesHandles = axesHandles(isNotInstanceOfSubtype);

Skrip bekerja dengan memilah-milah gagang yang mengungkapkan menjadi tipe sub-tipe sumbu, misalnya scribe.legend.

Peringatan bagi mereka yang mencoba memperbaiki cuplikan kode di atas: menggunakan sesuatu seperti

classHandles = cellfun(@(x) handle(x), axesHandles)

mungkin tidak berfungsi sebagaimana dimaksud:

??? Error using ==> cellfun
scribe.legend type is not currently implemented.

2
2017-08-27 10:05



"Jonas" dan "tm1" memiliki jawaban yang berfungsi untuk beberapa orang. Namun, karena tm1 menunjukkan masalah, ada beberapa item di dalam 'sumbu' jenis.

Untuk tepat mengacu pada legenda atau sumbu itu sendiri (mungkin ada item lain), Anda perlu membedakannya, menggunakan sifat-sifat khasnya.

Dalam contoh saya, saya membuka "editor properti" dan mencari properti yang berbeda untuk sumbu dan legenda (karena keduanya memiliki "tipe, sumbu"). Saya mencoba menyalin sumbu dan legenda saya:

copied_axes = findobj(temp_fig,'type','axes','Tag','');
copied_legend = findobj(temp_fig,'type','axes','Tag','legend');

Alih-alih properti 'Tag', saya juga bisa menggunakan properti lain dari "Inspektur Properti". Masalahnya, mereka harus berbeda. Sebagian besar propertinya sama.


2
2017-08-28 13:51



Solusinya dengan @ tm1 sangat bagus. Milik saya sedikit lebih rumit (jika Anda tidak masalah dengan pemrograman fungsional):

% initialize `fig` somehow, i.e., "fig=gcf()" for the current figure or
% "fig=get(0,'children')" for all open figures; can be vector or scalar.

ax = findall(fig, 'type', 'axes');
ax = ax(arrayfun(@(i) strcmp(class(handle(i)), 'axes'), ax));

ax hanya akan berisi kapak plot. Ini berfungsi karena class dari objek legenda atau colorbar berbeda dari axes.

Edit @ Jonas menunjukkan peningkatan potensial untuk menyaring hasil findall, karena setidaknya legenda dan colorbar tampaknya tidak kosong Tag properti: ganti baris terakhir di snipet kode di atas dengan

ax = ax(strcmp('', get(ax, 'Tag')))

Kedua teknik ini bersifat kludgy dan dapat rusak di masa depan (perbandingan dengan ggplot2 atau Bokeh mungkin menarik).


2
2017-09-03 13:17