2016-08-22 3 views
0

У меня есть 2 массивы данных x и y оба 22250-по-54, и я пытаюсь использовать hist3 и imagesc сделать графики плотности для каждого x(:,n) и y(:,n) пары, где n = 1:54.Matlab Hist3/Imagesc Ось Scaling

Я использую imagesc(values2) где:

values2 = hist3([x(:) y(:)],[round(max(x)) round(max(y)) ]); 

использовать как мой аргумент построить для каждого из 54 x и y значений, чтобы получить уникальный диапазон оси и она отлично работает. Однако, когда я место фиксированного целые значения для values2, таких как

values2 = hist3([x(:) y(:)],[50 50 ]); 

действительных значений для каждого из 54 столбцов x и y в конечном итоге получить масштабируется к [50 50] параметрам или если я использую [100 100 ], и он не отражает значения ACTUAL для каждого x и y. Как я могу исправить оси x,y и сохранить фактические значения в диапазоне с фиксированной осью?

Я попытался также с помощью xlim и ylim в отдельном вызове после вызова imagesc(values2) и это не работает, либо - это участки мои данные в очень небольшой площади и оставляет много пустого пространства вокруг области изображения.

Благодарим за помощь!

Я попробовал «проверил» ответ по ссылке ниже, чтобы добраться туда, где я сейчас нахожусь: Scatter plot with density in Matlab

+0

оси х и у или диапазон данных не равны. Переменная x - это скорость ветра, а переменная y - температура. Спасибо, – user2100039

+0

Ожидаемый диапазон для переменной x может составлять от 0 до 30 (скорость ветра), а ожидаемый диапазон значений для температуры для всех 54 случаев может быть от -20 до +40. Спасибо. – user2100039

+0

Привет - да, это работает так же, как и мой текущий код. Диапазоны оси x и y изменяются с каждым новым графиком. Это не то, что мне нужно. Я хочу сравнить распространение данных с тем же или фиксированным диапазоном оси x и y для каждого случая выше для n, где n = 1:54. Благодаря! – user2100039

ответ

0

Использование answer you referenced вы можете написать:

% some arbitrary data: 
x = randi(30,30,54); 
y = randi(61,30,54)-21; 

% constant values for every n: 
nbins = [round(range(y(:))) round(range(x(:)))]+1; 
x_lim = [min(x(:)) max(x(:))]; 
y_lim = [min(y(:)) max(y(:))]; 

% plotting: 
for n = 1:9 
    [values2, centers] = hist3([x(:,n) y(:,n)],nbins); 
    subplot(3,3,n) % this is just for compact demonstration 
    h = imagesc(centers{:},values2.'); 
    title(num2str(n)) 
    xlim(x_lim) % keeping the x-axis limits constant 
    ylim(y_lim) % keeping the y-axis limits constant 
    axis xy 
end 

Обратите внимание, что вы можете получить с области для ваших участков, как в этом примере, если данные в x(:,n) или y(:,n) имеют меньший диапазон, то y(:) и x(:,n).

который даст: значения оси imagesc hist

+0

Я пробовал ваше решение. первый сюжет в порядке. Второй график в цикле или когда n == 2, я получаю ошибку в переменной values2 «Index превышает размеры матрицы». Твои мысли? Кроме того, метки оси или метки x и y tick имеют десятичную форму, а не целые числа. спасибо, – user2100039

+0

Я запускаю это в цикле без ошибок, вы можете скопировать строку, которая делает ошибку? что касается меток, это можно отредактировать с помощью 'sprintf', я бы добавил его к ответу, но я не уверен, что вы хотите увидеть – EBH

+0

values2 = hist3 ([y (:, n) x (:, n) ], [round (range (y (:, n))) round (range (x (:, n)))]); – user2100039

Смежные вопросы