Diskuze: XY (scatter) plot v C#

C# .NET .NET (C# a Visual Basic) XY (scatter) plot v C# American English version English version

Aktivity (3)
Avatar
Jan Procházka:12. července 18:17

Jakou knihovnu a jak použít pro tvorbu 2D "grafu" pro znázornění prostorového rozložení bodů v rovině?

Jak vytvořit body na daných souřadnicích a přiřadit jim popisky?
Jak s těmito popisky aktivně pracovat - zjistit, na který (blízké okolí) je kliknuto a upravit jeho vzhled?

Zkusil jsem: V MATLABu bych to vyřešil snadno (,protože MATLAB.written­lines.length >> C#.writtenlines­.lentgh):

Points=[0 0;0 1;1 0]; %// Vytvoreni matice. radky oddelene ";" - souradnice ii-teho bodu. sloupce oddelene " " - x y souradnice.

line('xdata',Points(:,1),'ydata',Points(:,2),'marker','o','linestyle','none'); %// Vykresleni jednotlivych bodu. Points(:,1) vrati cely prvni sloupec matice. Dale se nastavi kolecko, jako znacka a smaze se cara mezi body

for ii=size(Points,1):-1:1 %// for cyklus s inkrementem -1 od 1 do poctu radek matice Points (1. rozmer matice)
  Texty=text(Points(ii,1),Points(ii,2),num2str(ii)); % vytvori textove pole s levym dolnim rohem na pozici x=Points(ii,1), y=Points(ii,2) a naplni tam cislo ii.
end %// ukoncovaci fraze bloku

Pozn.:
MATLAB používá dynamické typování a dynamicky mění i velikost matic (polí).
Jako čítač je vhodné používat ii, protože i a j jsou nativně konstanty imaginární jednotky a jiné použití je tiše přetypuje na (neimaginární) double.
MATLAB indexuje prvky "neprogramátorsky" od 1 do N, narozdíl od "programátorského" indexování od 0 do N-1.
for cyklus NEPROBÍHÁ přes indexy od - do s nějakou změnou, ale přes všechny prvky zadané matice. for 5:-1:1 je zkrácený zápis indexy=[5,4,3,2,1];for indexy a ekvivalent for(int ii=5,--ii,ii>=1){.
end je jediná možná ukončovací fráze bloku. Musí tedy ukončit i jednopříkazový blok.
"%" uvozuje jednořádkovou poznámku.

Chci docílit: Jak dosáhnout podobného efektu a funkčnosti?

Cílem je vytvořit ve WPF okně souřadný systém (ekvivalent MATLABovskému objektu axes) ve kterém bych mohl vykreslovat jednotlivé body na daných souřadnicích s nějakým textem a pracovat s nimi (přes callbacky).

ii-tému bodu se dá upravit leccos.

set(Texty(3),'fontweight','bold','color','red');
get(Texty(3),'xdata')

První nastaví třetímu popisku tučné písmo a obarví jej načerveno. Druhý příkaz vypíše do konzole x-ovo souřadnici téhož pole.

Editováno 12. července 18:19
 
Odpovědět 12. července 18:17
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Jan Procházka
Luboš Satik Běhounek:12. července 19:24

Kreslit v C# můžeš třeba do Bitmapy přes pixely, případně přes třídu Graphics, která toho nabízí o něco víc.
Pokud to chceš i zobrazovat, tak třeba přes třídu Canvas.

Nahoru Odpovědět 12. července 19:24
https://www.facebook.com/peasantsandcastles/
Avatar
René Češka:16. července 13:56

Pokud hledáš knihovnu na grafy tak wpf toolkit obsahuje grafy ale jsou celkem pomalé, liveCharts jsou hodně pěkné grafy ale nemám s nimi žádnou zkušenost.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 16. července 13:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.