Zoom x-axis in RTGrapher?
Hi Everyone, I'm using RTGrapher to display a simple line graph where the x-axis has values from roughly 0 to 500,000 and the y-axis from 0 to 20. What I'd like to be able to do is to zoom in just the x-axis, i.e. instead of displaying the entire 0 to 500,000 range, be able to narrow it down in stages, to, e.g. 430,000 to 431,000. The y-axis would be unchanged, i.e. still 0 to 20. Ideally I could then scroll left and right along the x-axis. I can create a Spec widget with buttons to redraw the graph, but was wondering if there was a better way. Thanks, Alistair
Hi Alistair! Yes, this is something we thought about some times ago. After updating Roassal, try this: -=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds. g addDecorator: (RTRangeSelector new callback: [:es | | classesToZoomIn | classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. ]. b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-= Let me know how it goes. Cheers, Alexandre -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Mar 28, 2018, at 4:02 AM, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi Everyone,
I'm using RTGrapher to display a simple line graph where the x-axis has values from roughly 0 to 500,000 and the y-axis from 0 to 20.
What I'd like to be able to do is to zoom in just the x-axis, i.e. instead of displaying the entire 0 to 500,000 range, be able to narrow it down in stages, to, e.g. 430,000 to 431,000. The y-axis would be unchanged, i.e. still 0 to 20. Ideally I could then scroll left and right along the x-axis.
I can create a Spec widget with buttons to redraw the graph, but was wondering if there was a better way.
Thanks, Alistair
Hi Alexandre, Thanks! (more below) On 28 March 2018 at 14:56, Alexandre Bergel <alexandre.bergel@me.com> wrote:
Hi Alistair!
Yes, this is something we thought about some times ago.
After updating Roassal, try this: -=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds.
g addDecorator: (RTRangeSelector new callback: [:es | | classesToZoomIn | classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. ].
b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-=
Let me know how it goes.
Great, it's working fine! If you select an empty portion of the graph an error is raised - "Error: No dataset has been added?". I solved this with the following change, which simply ignores empty areas and notifies the user: RTRangeSelector>>callbackWithSelectedElements | selectedElements | selectedElements := self elementsWithinTheSelection. selectedElements ifEmpty: [ UIManager default inform: 'Empty region selected, ignoring'. ^self ]. self evaluateCallBackWithElements: selectedElements That was a quick hack, so there could well be a better solution.
From what I can see, there isn't a way to zoom back out or scroll left and right.
I might modify RTRangeSelector so that a right click zooms out. I'll have to think about scrolling a bit more. Thanks again! Alistair
Cheers, Alexandre
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Mar 28, 2018, at 4:02 AM, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi Everyone,
I'm using RTGrapher to display a simple line graph where the x-axis has values from roughly 0 to 500,000 and the y-axis from 0 to 20.
What I'd like to be able to do is to zoom in just the x-axis, i.e. instead of displaying the entire 0 to 500,000 range, be able to narrow it down in stages, to, e.g. 430,000 to 431,000. The y-axis would be unchanged, i.e. still 0 to 20. Ideally I could then scroll left and right along the x-axis.
I can create a Spec widget with buttons to redraw the graph, but was wondering if there was a better way.
Thanks, Alistair
Easy. You can add a reset button: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds. g addDecorator: (RTRangeSelector new callback: [ :es | | classesToZoomIn | classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. v addMenu: 'Reset' callback: [ v cleanAll. b value: RTShape withAllSubclasses ]. ]. b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= If you wish to have a right click, you can do: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds. g addDecorator: (RTRangeSelector new callback: [ :es | | classesToZoomIn | classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. v when: TRMouseRightClick do: [ v cleanAll. b value: RTShape withAllSubclasses. v signalUpdate ]. ]. b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cheers, Alexandre -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Mar 29, 2018, at 5:45 AM, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi Alexandre,
Thanks! (more below)
On 28 March 2018 at 14:56, Alexandre Bergel <alexandre.bergel@me.com> wrote:
Hi Alistair!
Yes, this is something we thought about some times ago.
After updating Roassal, try this: -=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds.
g addDecorator: (RTRangeSelector new callback: [:es | | classesToZoomIn | classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. ].
b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-=
Let me know how it goes.
Great, it's working fine!
If you select an empty portion of the graph an error is raised - "Error: No dataset has been added?".
I solved this with the following change, which simply ignores empty areas and notifies the user:
RTRangeSelector>>callbackWithSelectedElements | selectedElements | selectedElements := self elementsWithinTheSelection. selectedElements ifEmpty: [ UIManager default inform: 'Empty region selected, ignoring'. ^self ]. self evaluateCallBackWithElements: selectedElements
That was a quick hack, so there could well be a better solution.
From what I can see, there isn't a way to zoom back out or scroll left and right.
I might modify RTRangeSelector so that a right click zooms out. I'll have to think about scrolling a bit more.
Thanks again! Alistair
Cheers, Alexandre
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Mar 28, 2018, at 4:02 AM, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi Everyone,
I'm using RTGrapher to display a simple line graph where the x-axis has values from roughly 0 to 500,000 and the y-axis from 0 to 20.
What I'd like to be able to do is to zoom in just the x-axis, i.e. instead of displaying the entire 0 to 500,000 range, be able to narrow it down in stages, to, e.g. 430,000 to 431,000. The y-axis would be unchanged, i.e. still 0 to 20. Ideally I could then scroll left and right along the x-axis.
I can create a Spec widget with buttons to redraw the graph, but was wondering if there was a better way.
Thanks, Alistair
Hi Alexandre, On 29 March 2018 at 15:07, Alexandre Bergel <alexandre.bergel@me.com> wrote:
Easy.
You can add a reset button: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= v := RTView new. b := [ :someClasses | g := RTGrapher new. g view: v. ds := RTData new. ds points: someClasses. ds y: [ :cls | cls numberOfMethods ]. ds x: [ :cls | cls numberOfLinesOfCode ]. g add: ds.
g addDecorator: (RTRangeSelector new callback: [ :es | | classesToZoomIn |
classesToZoomIn := es collect: #model. v cleanAll. b value: classesToZoomIn ]). g build. v addMenu: 'Reset' callback: [ v cleanAll. b value: RTShape withAllSubclasses ]. ].
b value: RTShape withAllSubclasses. v -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Thanks! All working now... Cheers, Alistair
participants (2)
-
Alexandre Bergel -
Alistair Grant