I'm a:
- ๐ Institutional Data Analyst
- ๐ป C++ Developer
- ๐ Readability Formula Researcher
- ๐๏ธ Amateur Typesetter
- ๐ (former!) Localization Engineer
- ๐ท (very) Amateur Photographer
Wisteria Dataviz Library
License: BSD 3-Clause "New" or "Revised" License
With the latest wxWidgets 3.3, the SideBar control shows serious flickering when you mouse over it.
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.
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.
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.
Sankey codes does this; apply the same to the other graph types.
The canvas may need to be temporarily resized while it exports (similar to what is done when printing).
Preferably something like a tree with purple leaves.
User needs at least 300 DPI for image export; this is required for publishing.
Customer has requested a word cloud feature.
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:
Wisteria-Dataviz/CMakeLists.txt
Lines 81 to 99 in da306a1
MSVS 2022 Community 17.1.4
CMake 3.22
wxWidgets current master
Show how to pivot a dataset longer for use in a line plot.
Originally posted by @matiashr in #39 (reply in thread)
When building the library using wxWidgets built with WXWIN_COMPATIBILITY_3_0
set to 0
, this code fails to compile:
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.
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.
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...
This could be useful for adding brackets or annotations next to a bar.
Bar charts (and perhaps pie charts) need the ability to apply user-defined brush patterns. Currently, only background color customizations are supported.
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).
Currently it only supports one, but you should be able to specify a vector of these.
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
Image should be centered above the text.
It should maintain its original size and note be scaled, unlike image left of the text.
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:
As the wxWidgets built-in error reporting mechanism was not suppressed with wxLogNull
when using wxTextFile
, another error box is produced:
This should happen after the min and (optional) max frequency filtering has been applied.
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.
Good morning
I am trying to compile the "library" on the wfollowgin environment
$ 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 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).
There are a lot of libraries which can be installed by msys2's pacman command, see:
https://packages.msys2.org/package/
But there are few ones which support wxWidgets. Hopefully this library will arrive there.
Thanks.
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:
Hi, this project is great, I just see your post from wx dev maillist.
But wx 3.1.7 is not released yet? Do you mean wx 3.1.6?
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...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.