У мене є кілька розріджених даних, і я хочу побудувати їх як маркери, з'єднані гладкою інтерпольованою лінією - як поведінка Microsoft Excel за замовчуванням.
Є рішення цієї проблеми легко знайтив Інтернеті, але я вважаю їх незадовільними. Що вони роблять, це: побудувати розрізнені дані як один набір даних, малюючи їх як маркери без ліній, інтерполювати їх методом вибору та побудувати інтерполяцію як другий набір даних, з рядками без маркерів.
Проблема цих хитрощів полягає в тому, що в легенді два набори даних будуть перераховані окремо. Я б очікував, що єдиний набір даних зображений в легенді як лінія, що перетинає маркер.
Чи можливо це в Matlab?
Відповіді:
4 для відповіді № 1Якщо ви хочете побудувати інтерпольовану лінію, існує багато способів зробити це. Ви можете спробувати створити інтерпольовану лінію за допомогою matlab interp1()
функція.
Нехай "s створює x і y дані без NaN.
x = randn(1,10)
y = randn(1,10)
Якщо вам потрібно 1000 точок даних, де раніше їх було лише кілька, це досить просто:
x2 = min(x):(max(x)-min(x))/1000:max(x)
y2 = interp1(x,y,x2,"cubic")
і ви можете побудувати свої дані та сплайнувати за допомогою
plot(x,y,"r+")
hold on
plot(x2,y2,"r-")
Користувацька легенда є простою, коли ви використовуєте графіку обробки. Ви можете побудувати набір даних фіктивних даних з червоною лінією, що проходить через маркер, використовуючи
h(1) = plot(NaN,NaN,"r-+")
lstring{1} = "Data";
Потім можна додати легенду, яка вказує на цей набір даних, використовуючи
legend(h,lstring)
Ви закінчите щось, що приблизно так:
Приємна річ у використанні графіки ручки (тобто h
) Ви можете кинути в легенду будь-які серії даних h(end+1)
і lstring{end+1}
.