Hi Alex,
In Eyesee, we have the concept of composite diagrams i.e. you can have
multiple charts in the same diagram with individual y axes (see attached
screenshot). This is a handy concept because not only you could have two
charts on the same diagram but each chart has its own axis. For comparing
disparate values, this is convenient because one does not need to think
about normalizing Y values of charts to the same scale. One example could
be showing trends of software metrics over time.
I saw that you ported more code from Charter to Grapher so I am having a
look at the examples. Is it possible to have composite chart diagrams with
Grapher? Do you plan to add this feature?
Here is a exemplary script that illustrates the need for composite diagrams:
| grapher minDate ds random dates grapherBlock|
dates := (Array with: Date today with: Date yesterday with: Date tomorrow)
collect: #asDateAndTime.
minDate := dates min.
random := Random seed: 10.
grapher := RTGrapherBuilder new
extent: 300 @ 200;
yourself.
grapherBlock := [:index |
ds := RTDataSet new.
ds interaction popup.
ds dotShape ellipse color: (Color red alpha: 0.5); size: 10.
ds points: dates sorted;
x: [ :aDate | aDate asUnixTime - minDate asUnixTime ];
connectColor: (Color random alpha: 0.5);
y: [ :d | (random nextInt: 100) * index].
grapher add: ds].
100 to: 103 do: grapherBlock.
1 to: 3 do: grapherBlock.
grapher axisConfiguration noDecimals.
grapher axisY.
grapher axisConfiguration
labelRotation: -30;
title: '';
numberOfLabels: dates size - 1;
labelConvertion: [ :v | (DateAndTime fromUnixTime: v + minDate asUnixTime)
asDate ] .
grapher axisX; build.
grapher view open
regards,
Usman
[image: Inline image 2]
[image: Inline image 3]
[image: Inline image 1]
Hi!
We had a wonderful week here in Cochabamba, Bolivia. Juan-Pablo, Juraj and I have taught Pharo and Moose during 5 days. Was pretty cool!
Here is a script that shows that one of the group was able to produce in just 3 days.
The figures analyze the content of my package-cache directory. It shows the number of commit per day, per hour, per author.
-=-=-=-=-=-=-=—=
myRepository := MCCacheRepository default.
myRepository allVersionNames.
packageNames := myRepository allVersionNames select: [ :e | 'Roassal*' match: e ].
"packageNames := myRepository allVersionNames. "
lista := packageNames collect: [ :packageName |
myRepository versionInfoFromVersionNamed: packageName. ].
autores := lista groupedBy: [ :e | e author ].
fechas := lista groupedBy: [ :e | e date ].
horas := lista groupedBy: [ :e | e time hour ].
c := RTComposer new.
v := c view.
c gap: 50.
popup := RTPopup text: [:assoc | assoc key asString, ', commits:', assoc value size asString].
elements := (RTEllipse elementsOn: fechas associations).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e key asTimeStamp asUnixTime ]
min: 0
max: 50000;
normalizeSize: [:e | e value size ] min: 10 max: 20;
normalizeColor: [:e | e value size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
"We add a line from the left most element to the right most element"
v add: ((RTLine new color: Color lightGray) edgeFrom: v elements leftMostElement to: v elements rightMostElement).
"It make sense to only drag horizontally"
v @ RTHorizontalDraggableView.
c propagateHighlight.
c group: 'date'.
listTags := Array new: autores size.
autores doWithIndex: [ :each :i|
test := each groupedBy: [ :e | e date ].
elements := (RTEllipse elementsOn: test associations).
v addAll: elements @ popup.
builder
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
newTag := 'Author' asString, i asString.
listTags at: i put: newTag.
c propagateHighlight.
c group: newTag.
].
popup := RTPopup text: [:assoc | 'Hour: ' asString, assoc key asString, ', commits:', assoc value size asString].
elements := (RTEllipse elementsOn: horas associations).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e key ]
min: 0
max: 380;
normalizeSize: [:e | e value size ] min: 10 max: 20;
normalizeColor: [:e | e value size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
c propagateHighlight.
c group: 'Hour'.
popup := RTPopup text: [:assoc | assoc author asString, ', ' , ' message size: ', assoc message size asString].
elements := (RTEllipse elementsOn: lista).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e timeStamp asUnixTime ]
min: 0
max: 50000;
normalizeSize: [ :e | e message size ] min: 10 max: 20;
normalizeColor: [ :e | e message size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
c propagateHighlight.
c group: 'Comment'.
listTags doWithIndex: [ :e :i|
(i == 1)
ifTrue: [
c move: e below: 'date'.
last := e.
c nameGroup: 'date' as: 'History by Date'.
aAuthor := autores keys at: i.
c nameGroup: e as: 'History by: ' asString, aAuthor asString.
]
ifFalse: [
c move: e below: last.
last := e.
aAuthor := autores keys at: i.
c nameGroup: e as: 'History by: ' asString, aAuthor asString.
]
].
c move: 'Hour' below: last.
c nameGroup: 'Hour' as: 'History by Hour'.
c move: 'Comment' below: 'Hour'.
c nameGroup: 'Comment' as: 'History by Comment'.
"We add a small legend"
v canvas addFixedShape: (TRLabelShape new text: 'History of Changes').
TRConstraint stickAtTheBottomOfTheWindow: v canvas fixedShapes last.
^v
-=-=-=-=-=-=-=—=
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi, sorry for bothering, but I’m trying to understand what I can use to build cool UIs. And with GToolkit I’ve started to think about Glamour. I’ve read a chapter in Deep Into Pharo book, and all there is in Moose Book. And everywhere there is this idea of “flow”, that one parts of visualization, are representing something transmitted from other parts. There are a lot of cases when I want to do something that does not have this notion of a flow. For example I want to have a main view and then use some widgets to modify it, or I have two representations of the same model and want to keep them in sync. Should I use a “dynamic presentation” for that? Are there any real projects like that, to see how they are implemented?
Uko
I' trying to customize label in RTPieBuilder this is my sample.
b := RTPieBuilder new.
b interaction popup.
b view: v.
b objects: listByRegion associations.
b slice: [ :e | e value size ].
b globalRule distinctColor.
"b labelled."
b label: (RTLabel new text: 'label test').
b build.
I commented "b labelled", but when I try to set label with RTLabel I get
it error in trachelShape, there is a way to set a custom label?
Thanks to the advances of GT, I have my doubt about the usefulness of the easel.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
first of all let me know where I can write questions about Woden (because I have not seen a lot of activity around it in any chat).
Woden and Roassal3D have a problem that when the 3D window is shown, text highlighting is not working. Usually it’s not a big deal, but Rubric writes white text on white background :). I think a problem like that was already in Roassal2 and maybe someone remembers how to solve that?
Uko
Hi everyone,
I think that during ESUG Woden was integrated into Toolkit in a way, what you can see a 3D visualization as one of the representations of the view. Is there any additional package that provides this functionality?
Uko
Thierry,
I am having difficulties re-generating the Ada parser
I take the Ada grammar, un-modified (so it should work) and when I try
to compile it (LALR(1)) with the SmaCCParserGenerator, I get at the
start of the gramar pane:
---
SmaCCParserError: Token not expected->#Definition extracted from old
style definition comments
<char_lit>: \'.\' ;
<char_string>: \"(\"\"|[^\n\"])*\" ;
[...]
---
Do you have an idea what is the problem and more importantly what is the
solution?
nicolas
Hi Alex,
I started to look into Charter and I would like to know which builder to
use in Roassal2 for drawing graphs because currently we
have RTGrapherBuilder and RTCharterBuilder. It looks to me as if they are
providing similar services but RTCharterBuilder is more up to date.
regards,
usman
In case you don't know yet:
http://d3js.org/
"*D3.js** is a JavaScript library for manipulating documents based on
data. D3 helps you bring data to life using HTML, SVG and CSS. D3’s
emphasis on web standards gives you the full capabilities of modern
browsers without tying yourself to a proprietary framework, combining
powerful visualization components and a data-driven approach to DOM
manipulation."*
Here nice examples:
https://github.com/mbostock/d3/wiki/Gallery