LabPlot2 for kde-edu?

Alexander Semke Alexander.Semke at
Wed Jan 1 15:52:01 UTC 2014


> Hi,
> I'm the maintainer of Cantor.
> As Aleix already pointed out, the requirements for joining the KDE family
> are quite low, and I'd like to encourage you to join.
> I agree that there are could be some interesting possible cooperation
> between Cantor and LabView.
> For example at the moment most(all, since I still owe Aleix the integration
> of the kalgebra-QML-item branch, sorry about that) of the plotting support
> in Cantor is static (i.e. showing an image), and due to the way most
> backends are implemented as separate processes this is hard to change.
> Instead we could offer our own interactive plotting fallback for which the
> backend only has to feed the data, which is much easier to do. What do you
> think? Does LabView offer a simple API for cases like that?
Yes. Let me give you more information. Currently, the worklflow in labplot is 
the following: you create a new project, worksheet, xy-plot and a xy-curve. 
Then you specify the data sets to be used for the x and for the y-data of this 
xy-curve. These data sources can originate from a spreadsheet where you type 
in the data by hand or where you import the data from an external ascii-file 
to the spreadsheet. So, in principle you just have to select a column. 
Internaly, such an Column object is just a wrapper over QList<double> 
(implementations for QList<QDateTime> etc. will follow in the next months). We 
just need to fill such Columns. At the moment, the labplot-user selects in a 
tree-like ComboBox the columns. Columns belong in this tree-hierarchie to 
Sreadsheets. Now, my idea was to integrate/embed Cantor into LabPlot. The user 
creates, e.g., a Maxima-session in LabPlot and performs some calculaitons 
leading to some arrays or lists or however these objects are named in the 
specific CAS where the results for the plots are stored. These arrays/lists we 
need to expose from Cantor to LabPlot. Then, the user selects in the ComboBox 
the Maxima-session and one of its children (array/list with the actual data) 
as the source for x- or y-data. By having this, we can combine the data 
originated from different sources - imported from an ascii-data, provided by 
hand in a spreadsheet or caclulated in maxima, octave etc. 

So, this was a LabPlot-centric suggestion where Cantor would "just" take a 
role of an additional data provider for the plots. Consider now the Cantor-
centric way of thinking. You create a plot and want to easily edit plot 
features. As you said, you show currently a static picture generated by a 
different framework. For this you could use something like QCustomPlot which 
is Qt-based,  can be embedded in any project and provides a lot of features 
and a clean interface. But then you still need to implement a lot of GUI-stuff 
when you want to provide easy ways of editing of the plot appearence.
This is where LabPlot can help since a lot of GUI-stuff for everything you see 
on the plot (or worksheet in general) is already available. The only problem 
here I see now is the fact that you need to create first a worksheet and then 
a plot. Internaly, worksheet provides you a QGraphicsScene/View and a plot 
inherits from QGraphicsItem. So, you create a worksheet and then a plot with 
axes and curves, activate a layout with zero margins and embed this 
QGraphicsView into you session-widget instead of a static picture. LabPlot's 
worksheet is shown within another widget instead of being an MDI-sub-window. 
And then you need to embed all LabPlot's dock widgets...
LabPlot's API is simple. As an example take a look at 
CartesianPlot::initDefault() here
You can also have a look at Axis.h or at XYCurve.h if you want to see which 
properties of these object can be modified. But it's easier to compile and to 
install LabPlot and to give it a try :-)

Just thought a bit longer about this... I think, it would be easier to use 
Cantor within LabPlot then the other was around if you want to have all the 
editing properties currently available with everything being undoable/redoable 
etc. In the long term, I can think of LabPlot being, with the help of Cantor, 
a complete and feature-rich frontend to different CASes. LabPlot provides you 
a "project explorer" where you have an overview of all objects you've created.
On the screenshots in Stuart's blog you see this project explorer on the left 
hand side. Having a maxima-session for example, you would have a parent node 
in the project explorer for this and as children nodes you could have all your 
variables, expressions, equations, inputs, plots, tables etc so you can easily 
navigate through your session. The middle part of LabPlot is the place for the 
actual "content"  - worksheet, spreadsheet, CAS-sessions, text editor windows 
for scripting stuff. On the r.h.s you have the dock widgets were you can edit 
a lot of properties of the currently selected object (or objects, yes, you can 
edit multiple object of the same type simultaniously - say, you can edit the 
line width of ten curves in a single step). For CAS one could show here the 
context related documentation. Something similar you already have in Cantor.

> As far as using Cantor to integrate other CASes, if you have a look at
> cantor/src/lib you see that internally Cantor is designed very  modular and
> provides a library which abstracts away all the backend specifics and is
> independent of the worksheet ui. You can just send a command and get the
> results. This should give you a simple access to all the different languages
> supported. (Although for big amounts of data it might be necessary to come
> up with something faster than using stdout+parsing). If you're interested
> in trying it out, feel free to ask me anything.
I don't intend to integrate new CASes. Maxima and Octave as additional data 
providers within LabPlot at the beginnig would be more than greate :-)
Serializing/deserializing of data is, I think, good enough at the beginning.

Best regards

P.S.: Just wanted to try out plotting in Cantor, but I failed to produce a 
plot in Maxima with plot2d(sin(x),(x,-1,1)) - I get an image with a lot of 
mess. Cannot send the screenshot here since there is a size limit on this 
mailing list... Cantor crashes if I try to replot this a couple of time. I can 
fill a bug report, if this is an unknown problem. If I add an additional $ at 
the end of the line, the plot appears in an external window.

More information about the kde-edu mailing list