Coder Social home page Coder Social logo

blake-madden / wisteria-dataviz Goto Github PK

View Code? Open in Web Editor NEW
9.0 9.0 2.0 12.71 MB

Wisteria Dataviz Library

License: BSD 3-Clause "New" or "Revised" License

CMake 0.54% C++ 99.45% C 0.01%
barchart cpp data-visualization dataviz donut-chart gantt-chart graphs heatmap histogram likert likert-scale-survey piechart plotting sankey-diagram visualization wordcloud wxwidgets-library

wisteria-dataviz's Introduction

Hi there ๐Ÿ‘‹

I'm a:

  • ๐Ÿ“ˆ Institutional Data Analyst
  • ๐Ÿ’ป C++ Developer
  • ๐Ÿ“š Readability Formula Researcher
  • ๐Ÿ–‹๏ธ Amateur Typesetter
  • ๐ŸŒ (former!) Localization Engineer
  • ๐Ÿ“ท (very) Amateur Photographer

GitHub stats

Top Langs

wisteria-dataviz's People

Contributors

blake-madden avatar pbfordev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

wisteria-dataviz's Issues

Arrows used on Likert charts should be optional

Emojis are used for these, so they may not be shown correctly if the font being used doesn't support them. For example, on Linux Mint the default font doesn't appear to support these characters.

CMake issues with wxWidgets 3.2

wxWidgets 3.2 requires the very latest CMake because of an update to the findwxWidgets file. Unfortunately, MSVS 2022 includes the prior CMake release, and updating the find file to fix it requires admin permissions on your machine.

May need to explicitly require the latest CMake, which will requiring waiting for MSVC to include that version as well.

403 forbidden error when connecting to this page

Any page from onlinelibrary.wiley will give a 403 error.

It appears to get getting your institution's information and displaying in the banner, so this information is passed via a browser somehow that libraries like cUrl don't.

Wordcloud feature

Customer has requested a word cloud feature.

  • Must support non-English letters
  • Add image to overview
  • Add dataset
  • Add to demo
  • Add icon

Does not build with MSVS in Debug configuration

When attempting to build x64 Debug configuration using generated MSVS solution, I get the error:

Building Custom Rule D:/Dev/Desktop/!Lib/Wisteria-Dataviz-GIT/CMakeLists.txt
2>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(700,5): error MSB6006: "CL.exe" exited with code 2.
2>cl : command line error D8016: '/O2' and '/RTC1' command-line options are incompatible
2>Done building project "Wisteria.vcxproj" -- FAILED.

The Release configuration builds just fine. I built only a couple of libraries with CMake but never encountered this error.

Can you really use CMAKE_BUILD_TYPE like this with multi-config generators:

IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
# /Zc:__cplusplus tells MSVC to set the C++ version to what we are
# actually compiling as. The default behavior in MSVC is to say that the
# C++ version is 98 always (for compatability reasons).
# Turns off C6211 warning: leaking memory due to an exception.
# wxWidgets uses heap-based objects for most everything, and MVSC complains
# about not wrapping all of this logic in try blocks.
TARGET_COMPILE_OPTIONS(Wisteria PUBLIC /Zc:__cplusplus /W3 /WX /Od /wd6211)
ELSE()
TARGET_COMPILE_OPTIONS(Wisteria PUBLIC /Zc:__cplusplus /W3 /WX /O2 /wd6211)
ENDIF()
ELSE()
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
TARGET_COMPILE_OPTIONS(Wisteria PUBLIC -Wall -Wextra -Wpedantic -Og)
ELSE()
TARGET_COMPILE_OPTIONS(Wisteria PUBLIC -Wall -Wextra -Wpedantic -O2)
ENDIF()
ENDIF()

MSVS 2022 Community 17.1.4
CMake 3.22
wxWidgets current master

Library fails to build with wxWidgets built with WXWIN_COMPATIBILITY_3_0 set to 0

When building the library using wxWidgets built with WXWIN_COMPATIBILITY_3_0 set to 0, this code fails to compile:

https://github.com/Blake-Madden/Wisteria-Dataviz/blob/28a670ba46bb9b61a6bbcc29b6120e98ff2638b3/src/util/logfile.cpp#L113-L153

Error C2039 'timestamp': is not a member of 'wxLogRecordInfo' Wisteria D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\util\logfile.cpp 115

It is because the deprecated wxLogRecordInfo::timestamp is not available anymore:
https://github.com/wxWidgets/wxWidgets/blob/17371d911d9ec68b0c2d98c7f56977523803b392/include/wx/log.h#L151-L153

It is probably simple to fix by just using wxLogRecordInfo::timestampMS divided by 1000, but it could be better to not duplicate wxLogFormatter code and use it (perhaps customized) instead.

BTW, is LogFile::DoLogTextAtLevel() ever called? In wxLog classes it is usually called from DoLogRecord() but you do not call it from there nor call the base method. But I may be missing something.

Asserts in sample in Point2D::Draw

When running a sample and trying to show some charts (e.g., Line Plot or Linear Regression Roadmap), an assert is shown:
D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\shapes.cpp(209): assert "m_drawFunction" failed in Wisteria::GraphItems::Shape::Draw(): Shape failed to set drawing function!

Call stack

	WisteriaDemo.exe!Wisteria::GraphItems::Shape::Draw(const wxRect & drawRect, wxDC & dc) Line 209	C++
 	WisteriaDemo.exe!Wisteria::GraphItems::Shape::Draw(wxDC & dc) Line 86	C++
 	WisteriaDemo.exe!Wisteria::GraphItems::Point2D::Draw(wxDC & dc) Line 322	C++
 	WisteriaDemo.exe!Wisteria::GraphItems::Points2D::Draw(wxDC & dc) Line 285	C++
 	WisteriaDemo.exe!Wisteria::Graphs::Graph2D::Draw(wxDC & dc) Line 867	C++
 	WisteriaDemo.exe!Wisteria::Canvas::OnDraw(wxDC & dc) Line 1311	C++

It seems that m_drawFunction is null because m_shape is Blank but as I am not familiar with code I do not know whether the problem is that the m_drawFunction is null when it should not be or whether the assert should take m_shape being Blank into account.

Windows 10 v19044.1889, wxWidgets GIT master built 64-bit Debug Static, both displays set at 125% DPI.

Sorry for flooding the repo with issues, I have not even really tried the library, as I always fail with some issue like this.

Buid fails because reportbuilder.cpp cannot be compiled

Attempting to compile reportbuilder.cpp fails with countless errors, here's a few of them:

Severity	Code	Description	Project	File	Line	Suppression State
Error	C2789	'borderFlags': an object of const-qualified type must be initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2211	
Error	C3536	'borderFlags': cannot be used before it is initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2216	
Error	C2065	'color': undeclared identifier	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3212	
Error	C2789	'colorValues': an object of const-qualified type must be initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3208	
Error	C3536	'colorValues': cannot be used before it is initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3209	
Error	C2065	'columnGrouping': undeclared identifier	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2181	
Error	C2789	'columnGroupings': an object of const-qualified type must be initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2179	
Error	C3536	'columnGroupings': cannot be used before it is initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2180	
Error	C3536	'convertedVars': cannot be used before it is initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2053	
Error	C2039	'GetLastError': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	33	
Error	C2039	'GetValueArrayBool': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2212	
Error	C2039	'GetValueArrayBool': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2410	
Error	C2039	'GetValueArrayNumber': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	610	
Error	C2039	'GetValueArrayNumber': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2120	
Error	C2039	'GetValueArrayNumber': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2179	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1255	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1257	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1273	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1274	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1275	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1548	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1974	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2049	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	2110	
Error	C2039	'GetValueStringVector': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3208	
Error	C2789	'isDate': an object of const-qualified type must be initialized	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	1325	
Error	C2039	'IsValueArray': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3144	
Error	C2039	'IsValueArray': is not a member of 'wxSimpleJSON'	Wisteria	D:\dev\Desktop\Lib\Wisteria-Dataviz-GIT\src\base\reportbuilder.cpp	3205	

I am quite sure I updated the GIT submodules so I have no idea where those missing methods are supposed to come from...

Add pattern support

Bar charts (and perhaps pie charts) need the ability to apply user-defined brush patterns. Currently, only background color customizations are supported.

  • Categorical bar chart
  • Histogram
  • Box plot
  • Pie chart

Need a "thicker" option for watercolor bar/box effect

The watercolor effect for bars and boxes uses the library's translucency value, which by default is low. A "thick watercolor" effect is needed that will render the same effect, but not use transparency (or at least be much higher, ~225).

Any feature about two Y axies in the chart?

Hi, I'm not familiar with your library.

I'm using a very simple wxMathPlot library for many years.

Now, I need some new features for 2 Y axis, I mean something like:

Plots with different scales โ€” Matplotlib 3.8.3 documentation

Is this possible?

Thanks.

I added a cross reference to wxMathPlot's ticket, it is hard to implement such feature in wxMathPlot library, see : two y axis with different coordinates, one on left and one on right ยท Issue #20 ยท GitHubLionel/wxMathPlot

Bugs in sample when importing CSV

Please, if you are not accepting issues, let me know and I will stop submitting them. It's just wxWidgets is in a sore need of a good maintained chart library, so I took interest in yours, thanks for it BTW.

Bug 1
The sample imports its files like this pieData->ImportCSV(L"datasets/Fall Enrollment.csv"...

However, relying on the CWD means that the import fails when the sample is launched from MSVS. Therefore, the sample should for example use wxStandardPaths::GetResourcesDir() and wxFileName to compose the path relative to the executable.

Bug 2
Reporting import error shows two error boxes: one empty followed by one by wxLogError(). When Dataset::ImportText() encounters an error when opening/reading the file, it throws std::runtime_error, passing it a wxString which includes the system error message. However, standard exception uses narrow std::string, so when the system error message contains characters not representable in the current code page, wxString conversion to narrow char produces an empty string:
wisteria-demo-error-empty
As the wxWidgets built-in error reporting mechanism was not suppressed with wxLogNull when using wxTextFile, another error box is produced:
wisteria-demo-logerror

How do you draw the pie chart?

Hi, I see this image:

https://github.com/Blake-Madden/Wisteria-Dataviz/blob/main/docs/doxygen/images/DonutChart.svg

I just want to now how do you draw the portion of a ring?

I have looked at the source code: Wisteria-Dataviz/piechart.cpp at 6670a45def9539e25f8be0e7c84763ffd202d2ce ยท Blake-Madden/Wisteria-Dataviz

I see it only have some GDI call like "dc.DrawEllipticArc".

I have a similar question in wx forum, see here: How to draw a portion of a ring?

So, do you use the pen which has the property set like: pen.SetCap(wxCAP_BUTT); or you use other method?

Thanks.

Compile fail on windows 10 + MSYS2 + ninja.exe

Good morning

I am trying to compile the "library" on the wfollowgin environment

  • Windows 10 64bit
$ cat /proc/version
MSYS_NT-10.0-19044 version 3.3.6-341.x86_64 (runneradmin@fv-az277-82) (gcc version 11.3.0 (GCC) ) 2022-10-24 08:25 UTC
$ pacman -Qe
base 2022.06-1
base-devel 2022.01-2
filesystem 2022.01-5
git 2.38.1-1
mingw-w64-clang-x86_64-github-cli 2.18.0-1
mingw-w64-cross-zlib 1.2.11-1
mingw-w64-i686-zlib 1.2.13-1
mingw-w64-ucrt-x86_64-zlib 1.2.13-1
mingw-w64-x86_64-binutils 2.39-2
mingw-w64-x86_64-cmake 3.24.2-4
mingw-w64-x86_64-crt-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-gcc 12.2.0-4
mingw-w64-x86_64-gcc-ada 12.2.0-4
mingw-w64-x86_64-gcc-fortran 12.2.0-4
mingw-w64-x86_64-gcc-libgfortran 12.2.0-4
mingw-w64-x86_64-gcc-libs 12.2.0-4
mingw-w64-x86_64-gcc-objc 12.2.0-4
mingw-w64-x86_64-gdb 12.1-4
mingw-w64-x86_64-gdb-multiarch 12.1-4
mingw-w64-x86_64-headers-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-libgccjit 12.2.0-4
mingw-w64-x86_64-libmangle-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-libwinpthread-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-make 4.3-1
mingw-w64-x86_64-pkgconf 1~1.8.0-2
mingw-w64-x86_64-qt6-base 6.4.0-3
mingw-w64-x86_64-tools-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-winpthreads-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-winstorecompat-git 10.0.0.r113.g57fd0b77a-1
mingw-w64-x86_64-wxwidgets3.2-msw 3.2.1-1
msys2-runtime 3.3.6-3

I have updated the repository as of today

$ git rev-parse HEAD
7c66c88d4b075ef2c01388889ea0f9658e8cbb38

damiano.bolla@P2-DAMIANOB MSYS /c/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   CMakeLists.txt

there is one line added to CMakeList.txt

SET(wxWidgets_ROOT_DIR "c:/msys64/mingw64")

The error that appears is

$ ninja.exe
[36/67] Building CXX object CMakeFiles/Wisteria.dir/src/ui/app.cpp.obj
FAILED: CMakeFiles/Wisteria.dir/src/ui/app.cpp.obj
C:\msys64\mingw64\bin\c++.exe -DWXUSINGDLL -D_FILE_OFFSET_BITS=64 -D__WXMSW__ -isystem C:/msys64/mingw64/lib/wx/include/msw-unicode-3.2 -isystem C:/msys64/mingw64/include/w
x-3.2 -g -std=gnu++17 -MD -MT CMakeFiles/Wisteria.dir/src/ui/app.cpp.obj -MF CMakeFiles\Wisteria.dir\src\ui\app.cpp.obj.d -o CMakeFiles/Wisteria.dir/src/ui/app.cpp.obj -c C
:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp
C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp: In constructor 'Wisteria::UI::BaseApp::BaseApp()':
C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp:21:5: error: 'wxHandleFatalExceptions' was not declared in this scope; did you mean 'OnFatal
Exception'?
   21 |     wxHandleFatalExceptions();
      |     ^~~~~~~~~~~~~~~~~~~~~~~
      |     OnFatalException
C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp: In member function 'void Wisteria::UI::BaseApp::GenerateReport(wxDebugReport::Context)':
C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp:279:84: error: cannot convert 'wxString' to 'LPCWSTR' {aka 'const wchar_t*'}
  279 |             ShellExecute(NULL, _DT(L"open"), wxStandardPaths::Get().GetDocumentsDir(),
      |                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
      |                                                                                    |
      |                                                                                    wxString
In file included from C:/msys64/mingw64/include/windows.h:89,
                 from C:/msys64/mingw64/include/winsock2.h:23,
                 from C:/msys64/mingw64/include/wx-3.2/wx/msw/wrapwin.h:46,
                 from C:/msys64/mingw64/include/wx-3.2/wx/msw/init.h:27,
                 from C:/msys64/mingw64/include/wx-3.2/wx/init.h:58,
                 from C:/msys64/mingw64/include/wx-3.2/wx/app.h:23,
                 from C:/msys64/mingw64/include/wx-3.2/wx/wx.h:25,
                 from C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.h:15,
                 from C:/Users/damiano.bolla/Documents/eclipse-python/Wisteria-Dataviz/src/ui/app.cpp:9:
C:/msys64/mingw64/include/shellapi.h:76:79: note:   initializing argument 3 of 'HINSTANCE__* ShellExecuteW(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, INT)'
   76 |   SHSTDAPI_(HINSTANCE) ShellExecuteW (HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);
      |                                                                       ~~~~~~~~^~~~~~
[41/67] Building CXX object CMakeFiles/Wisteria.dir/src/ui/controls/searchpanel.cpp.obj
ninja: build stopped: subcommand failed.

Thank you for any possible hint

Sankey diagram needed

Sankey diagram is needed for a report. A rudimentary two-column one is fine for now, but more than two columns later could perhaps be useful (although IMO more than three columns is unreadable).

  • Basic Sankey diagram, requiring a "from," "to," and "weight" series of columns
  • Ability to control the color scheme
  • Grouping support (for the first column)

Add support for loading a report spec file

Would be nice to be able to import a JSON file that describes a canvas (or series of canvases) and all of its contents.
This should include:

  • Datasets
  • Reference lines and areas
  • Annotations on graphs
  • Graph backgrounds and images
  • Text labels
  • Images
  • Line plots
  • Pie charts
  • Bar charts
  • Histograms
  • Box plots
  • LR Roadmaps
  • Pro Con Roadmaps
  • Candlestick plot
  • Likert charts
  • Gantt charts
  • Heatmaps
  • W-Curve plots
  • Tables
  • Shapes
  • Fillable shapes
  • Printing of multiple pages
  • Paper size

Documentation is lacking regarding building your own dataset and passing it on to a graph

I'm trying to replicate the Line Plot demo using data from memory instead of a CSV file but I cannot figure it out. The call to SetData() keeps saying "Y column not found for line plot" even though I followed the official instructions. Can somebody who uses this library please translate the following code for me? I need it to load the AVG_GRADE from an array of doubles and WEEK_NAME from an array of strings (any type of string is fine):

linePlotData->ImportCSV(L"/home/leo/Wisteria-Dataviz/datasets/Spelling Grades-custom.csv",
		Data::ImportInfo().
		// first the Y column
		ContinuousColumns({ L"AVG_GRADE"}).
		// group and X
		CategoricalColumns({
			{ L"WEEK_NAME", Data::CategoricalImportMethod::ReadAsStrings }
			}));

The above code is basically the same as the official demo but with only one line instead of two. The CSV file has also been modified to reflect this, and the graph does display correctly. I just can't figure out how to do it from arrays...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.