2014-01-08 10 views
9

Я хотел бы построить набор данных 1 и набор данных 2 в одном графике по вертикали. К сожалению, данные огромны, поэтому это всего лишь мазок точек и не может видеть плотность. Я пробовал hist3 и другие предложения, но он перезаписывает мои наборы данных, и биннинг выглядит ужасно.График рассеяния с плотностью в Matlab

Есть ли другой способ построения графика разброса плотности? Неужели для этого нет функции Matlab? Если нет, какую программу я мог бы использовать для простого создания такого сюжета?

Соотношение между этими двумя примерами:

Example1

Example2 http://www.bcgsc.ca/people/malachig/htdocs/alexa_platform/alexa_seq/FL_Trans/images/HS1361/ExonRegionVsGeneExpression_Log2.jpeg

+0

Я не уверен на 100%, что у меня возникает вопрос - но не будет ли полупрозрачных кругов решить вашу проблему? Плотность будет выше в более темных местах (из-за большего перекрытия кругов). Если это достаточно хорошо, это не может быть сделано (afaik) стандартными средствами (настройка альфа-графика/разброса), но есть временное решение с использованием патчей (которые могут быть полупрозрачными), см., Например, [ http://stackoverflow.com/questions/6366404/semi-transparent-markers-in-matlab-figures] – JakubT

ответ

19

Благодаря @Emil Albert для коррекции (транспонирования отсутствовали)


Что с вычислительной hist3 и отображением результата с imagesc?

data1 = randn(1,1e5); %// example data 
data2 = randn(1,1e5) + .5*data1 ; %// example data correlated to above 
values = hist3([data1(:) data2(:)],[51 51]); 
imagesc(values.') 
colorbar 
axis equal 
axis xy 

enter image description here


Если вы хотите иметь оси в соответствии с истинными данными значениями: использовать второй выход hist3 получить позиции бен центров, и передать их в imagesc:

data1 = randn(1,1e5); %// example data 
data2 = 2*randn(1,1e5) + 1.2*data1 + 4; %// example data correlated to above 
[values, centers] = hist3([data1(:) data2(:)],[51 51]); 
imagesc(centers{:}, values.') 
colorbar 
axis xy 

enter image description here

+0

Есть ли способ, которым я могу использовать hold вкл/выкл в приведенном выше примере? –

+2

@ C.Colden Конечно. Вы можете использовать 'hold on' и строить линии на нем. Попробуйте, например, 'hold on; plot (1: 50,1: 50, 'k -', 'linewidth', 1.5) 'после моего кода –

+0

Есть ли способ, чтобы ось x, y соответствовала фактическим случайным числам? Я уверен, что концентрация случайных чисел не близка к точке (25,25), как показывает графика. Было бы более информативным, если это возможно. – Integral

2

Попробуйте Violin Plot представление о File Exchange. Это очень настраиваемый. Я использую это все время. Благодаря @Jonas.

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