Soru sorMatlab de plot komutuyla birden fazla veriyi üst üste bindirerek grafik haline getirme
m.topan tarafından 4 yıl önce soruldu

Arkadaslar merhaba,,
Elimde her biri 300 Mb dan büyük 4-5 adet büyük excel data lari var. biz bu verileri kiyaslama yapmak amaciyla üst üste bindirilmis sekilde grafik haline dönüstürüp sirketteki sunumda ilgili birimlerle analiz etmek istiyoruz. Asagidaki sekliyle bir komut yazdim örnek olarak:

data1=uigetfile('*.*','1');
data2=uigetfile('*.*','2');

a=xlsread(data1);
b=xlsread(data2);

year1=a(:,1);
month1=a(:,2);
day1=a(:,3);
hour1=a(:,4);
min1=a(:,5);
second1=a(:,6);
milisec1=a(:,7);
force1=a(:,8);
year2=b(:,1);
month2=b(:,2);
day2=b(:,3);
hour2=b(:,4);
min2=b(:,5);
second2=b(:,6);
milisec2=b(:,7);
force2=b(:,8);
x= datetime(year1, month1,day1,hour1,min1,second1,milisec1);
y= datetime(year2, month2,day2,hour2,min2,second2,milisec2);
plot(x,force1,'r');
hold on
plot(y,force2,'b');
title("Data");
xlabel("Time");
ylabel("(kN)");
grid on;
figure

Ilgin bir sekilde kod bir hata bile vermeden ilk seferde calisti =)

Ancak cok okunabilir bir halde degil. (Resim yüklemeye calisiyorum. Olmazsa ilgilenene özelden de gönderebilirim.)
Üst üste bindirilmis grafikler icin farkli bir önerisi olan varsa lütfen ve acil olrarak konunun altina yorum ve fikirlerini paylasabilirse cok mutlu olurum.

Tesekkürler…

14 Cevap
En iyi cevap
hakkans Yönetici tarafından 4 yıl önce cevaplandı

Sorununuzun grafik çizdirmeyle değil verinizle alakalı olduğunu düşünüyorum. Anladığım kadarıyla çok daha az salınımlı, düz grafikler istiyorsunuz. Bunun için aşağıdaki linkteki smoothdata() fonksiyonunu kullanmayı deneyebilirsiniz:
https://www.mathworks.com/help/matlab/ref/smoothdata.html

sayginer Yönetici tarafından 4 yıl önce cevaplandı

Merhaba,
Görsel yüklemek için aşağıdaki adımları izleyebilirsinizŞ

  1. Görselinizi bir herhangi bir görüntü yükleme sitesine yükleyin. Örn: https://imgyukle.com
  2. Daha sonra yüklediğiniz görselin bağlantısını aşağıda da gösterilen imge'ye tıklayarak yapıştırın
hakkans Yönetici tarafından 4 yıl önce cevaplandı

Merhaba,
Grafikle ilgili nasıl bir okunabilirlik sorunu yaşadığınızı daha açık belirtebilir misiniz? Figürü kaydettiğinizde yazılar küçük mü kalıyor? Yoksa çizgi grafikleriyle ilgili bir sorununuz mu var? Resim buraya yükleyemezseniz, hakkanscaldag@gmail.com adresine gönderebilirsiniz.

sayginer Yönetici tarafından 4 yıl önce cevaplandı

Lütfen mümkün olduğunca görselleri bu sayfa üzerinden payşalım ki ileride de aynı sorunu yaşayacak kişiler de fayda sağlayabilsin.

m.topan tarafından 4 yıl önce cevaplandı


 

m.topan tarafından 4 yıl önce cevaplandı

Örnek resim olarak bunlari gönderebilirim. 2.resim zoom yapilmis hali. Asagidaki zaman ifadesinden de anlasilabilecegi üzere. baya bir yakinlastirirsak belki daha net olabilir ama yine de icime sinmedi gibi.Expert lerin fikirlerini duymak daha iyi olur bence =) Tesekkürler

m.topan tarafından 4 yıl önce cevaplandı

Bu arada hold on komutunu kullanmadan plot(x,force1,'r',y,force2,'b'); seklindede yazabiliriz saniyorum.

m.topan tarafından 4 yıl önce cevaplandı

@hakkans benim kodumun neresine smoothdata() yi monte etmeliyim. Su sekilde mi;

...
...
x= datetime(year1, month1,day1,hour1,min1,second1,milisec1); y= datetime(year2, month2,day2,hour2,min2,second2,milisec2);

AA= smoothdata(x);
BB= smoothdaza(y);



Tam olarak nasil oluyor?

hakkans Yönetici tarafından 4 yıl önce cevaplandı

Sizin x değil y datanızı smooth etmeniz lazım. O yüzden sadece aa=smoothdata(x) demeniz gerekli. Tabii filtreleme isteğinize göre birkaç ek ayar da yapabilirsiniz. Savitsky-Golay filtresi bildiğim kadarıyla bu tip datalarda iyi oluyor. Onu kullanmak için aa=smoothdata(x,'sgolay') gibi bir komut kullanmanız gerekiyor.

m.topan tarafından 4 yıl önce cevaplandı


 
Savitzky-Golay filtresini denedigimde resimdeki hatayi aliyorum. Konuyla ilgili Support-Team e mail attim cevap bekliyorum.
–> Smoothdata() komutunu calistirdigimda ise asagidaki ekran ciktisiyla karsilasiyorum.



smoothdata(y,force2);
….
….
olarak da yazdim ayni hatayi aliyorum. Sorun nerede? smooth komutunu kullanirken nerede hata yapiyorum??

sayginer Yönetici tarafından 4 yıl önce cevaplandı
  1. Savitzky-Golay filtresini kullanabilmeniz için gerekli olan Signal Processing Toolbox sizde yok gözüküyor. Onu yüklemeniz gerekiyor. Bkz: https://uk.mathworks.com/videos/add-on-explorer-106745.html
  2. Burada tarih ve zaman verisi kullaniyorsunuz. smoothdata fonksiyonunu kullanabilmek için nümerik veriler girmelisiniz. Nitekim aldığınız uyarılar da bunu belirtiyor. Tarih verisini nümerik veriye çevirmek için:
    https://uk.mathworks.com/help/matlab/ref/datenum.html
    https://uk.mathworks.com/help/matlab/ref/datetime.yyyymmdd.html
m.topan tarafından 4 yıl önce cevaplandı


 
Selamlar tekrardan, simdi de bu hata cikti. Kodu inceler misiniz nerede hata yapiyorum? Vallahi gicik oldum biraz. Zaten expert degilim en son unide kullanmistim simdi tekrar ögrenmeye calisiyorum kendim.
Tesekkürler

hakkans Yönetici tarafından 4 yıl önce cevaplandı

Merhaba,
İki grafiği aynı anda çizdirmeye çalıştığınız için hata alıyorsunuz. x veriniz datetime formatında iken smth dediğiniz veriyi datenum ile başka bir formata çevirmiş oluyorsunuz. Ayrıca dün konuştuklarımızdan anladığım kadarıyla smoothdata fonksiyonunu sadece force1 ve force2 vektörlerine uygulamanız gerekiyor. Böyle yaptığınızda bu hata da ortadan kalkacaktır.

m.topan tarafından 4 yıl önce cevaplandı

size bir mail attim hakan bey kisaca bakabilir misiniz? tsk @hakkans