TGraph 2 Y-axis for different's scales
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
TGraph 2 Y-axis for different's scales
I need to make a graph to compare 2 graph lines on time, but values from one are too high to the other, is there any way to make 1 graph line to a 1 y-axis and the other line to a second y-axis?
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Hebert,
How about putting two graphs on the same page each with a different Y axis scale and the same X axis scale?
James
How about putting two graphs on the same page each with a different Y axis scale and the same X axis scale?
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
Re: TGraph 2 Y-axis for different's scales
Hi James, look like a good solution but when Y-axis values overlap will be a mess, the big problem is that while Crude Oil is measured in hundreds of thousands, gas values is measured in millions, and we need to see both lines together to show how they interact each other. Searching in other's forum's I found this post http://forums.fivetechsupport.com/viewt ... 60#p105832James Bott wrote:Hebert,
How about putting two graphs on the same page each with a different Y axis scale and the same X axis scale?
James
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Hebert,
If they are two different graphs, then they can have different ranges on the Y-axis and the increments will be different. So, for instance, the bottom graph could have a range from 300,000 to 500,000 and the top one could have a range from 400,000 to 5 million even if both graphs are physically the same height.
Another option is to just divide the gas values by 10 and plot them on the same graph. Since you are looking for interactions, the exact values seem to be of less importance.
It would also be interesting to plot the difference between the two values (measured at the same time). This would probably tell you more about the interaction than plotting them both separately.
I'm not sure what you wanted me to see in the other message thread about charts?
James
If they are two different graphs, then they can have different ranges on the Y-axis and the increments will be different. So, for instance, the bottom graph could have a range from 300,000 to 500,000 and the top one could have a range from 400,000 to 5 million even if both graphs are physically the same height.
Another option is to just divide the gas values by 10 and plot them on the same graph. Since you are looking for interactions, the exact values seem to be of less importance.
It would also be interesting to plot the difference between the two values (measured at the same time). This would probably tell you more about the interaction than plotting them both separately.
I'm not sure what you wanted me to see in the other message thread about charts?
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
Re: TGraph 2 Y-axis for different's scales
All right James, I'll give it a try, I'll show the result on this post.
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
Re: TGraph 2 Y-axis for different's scales
James with this Code:
I Get This:
I need something like This:
[/img]
Code: Select all
#include "Fivewin.ch"
#include "TGraph.ch"
FUNCTION MAIN()
LOCAL oDlg, oGraph1, oGraph2
DEFINE DIALOG oDlg;
SIZE 600, 500
@ 1, 1 GRAPH oGraph1;
SIZE 250, 200;
TYPE 3;
YVALUES 3D XGRID YGRID XVALUES LEGENDS
@ 1, 1 GRAPH oGraph2;
SIZE 250, 200;
TYPE 3;
YVALUES 3D XGRID YGRID XVALUES LEGENDS
oGraph1:aSeries = { { "Crude Oil MBD", CLR_GREEN ,, }}
oGraph2:aSeries = { { "", CLR_GREEN ,, },{ "Gas MMPCD", CLR_HRED ,, }}
oGraph1:aData = { { 14280, 20420, 12870, 25347, 7640 }}
oGraph2:aData = { {0,0,0,0,0 },{ 7520000, 11220760, 9745154, 10125000, 12210000 }}
oGraph1:nClrX = CLR_GREEN
oGraph1:nClrY = CLR_RED
oGraph2:nClrX = CLR_GREEN
oGraph2:nClrY = CLR_RED
@ 0, 0 BUTTON "Change" ACTION ( oGraph1:nType :=1 , oGraph1:Refresh() )
ACTIVATE DIALOG oDlg;
CENTER
RETURN NIL
I need something like This:
[/img]
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Heber,
As I suggested, try dividing all the gas values by 10 and plotting them. If that works then all you have to do is figure out how to place the Y-axis values on the right side.
But also, think of the bigger picture. Maybe there is a better way to find answers. That's why I also suggested plotting the difference between the two values. Sometimes you have to give them what they need instead of, or in addition to, what they want.
James
As I suggested, try dividing all the gas values by 10 and plotting them. If that works then all you have to do is figure out how to place the Y-axis values on the right side.
But also, think of the bigger picture. Maybe there is a better way to find answers. That's why I also suggested plotting the difference between the two values. Sometimes you have to give them what they need instead of, or in addition to, what they want.
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
Re: TGraph 2 Y-axis for different's scales
Thank's James, you are right giving what they need in addition to what they want.James Bott wrote:Heber,
As I suggested, try dividing all the gas values by 10 and plotting them. If that works then all you have to do is figure out how to place the Y-axis values on the right side.
But also, think of the bigger picture. Maybe there is a better way to find answers. That's why I also suggested plotting the difference between the two values. Sometimes you have to give them what they need instead of, or in addition to, what they want.
James
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Heber,
Here is an example chart. I think this is the best we can do with TChart without modifying it. TChart cannot handle putting different axis increments on the right-hand side. And, ideally you would want to give the axis itself a label (like "Gas Flow MMPCD") which would also require another modification.
You could just modify a copy of TChart and hardcode the modifications into it. Otherwise you might want to make changes to the class that would allow anyone to add the optional increments, increment labels, and the axis label. That would be much more work, I'm sure.
An alternative (as I mentioned previously) is to put two separate charts on the same page (and/or screen).
James
Here is an example chart. I think this is the best we can do with TChart without modifying it. TChart cannot handle putting different axis increments on the right-hand side. And, ideally you would want to give the axis itself a label (like "Gas Flow MMPCD") which would also require another modification.
You could just modify a copy of TChart and hardcode the modifications into it. Otherwise you might want to make changes to the class that would allow anyone to add the optional increments, increment labels, and the axis label. That would be much more work, I'm sure.
An alternative (as I mentioned previously) is to put two separate charts on the same page (and/or screen).
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
- Marc Venken
- Posts: 727
- Joined: Tue Jun 14, 2016 7:51 am
Re: TGraph 2 Y-axis for different's scales
James,
Could you please post the sample code here ? Looks interesting for later use.
Could you please post the sample code here ? Looks interesting for later use.
Marc Venken
Using: FWH 20.08 with Harbour
Using: FWH 20.08 with Harbour
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Here's the source. Remember, don't copy it using MS Edge.
James
James
Code: Select all
/*
Purpose: Test charting to items with vastly different scales on the same chart
Author : James Bott
For : Hebert Vargas
Date : 08/07/2017 07:28:29 AM
*/
#include "Fivewin.ch"
#include "TGraph.ch"
FUNCTION MAIN()
LOCAL oDlg, oGraph, aData1, aData2, i
// Assign the data
aData1:= { 14280, 20420, 12870, 25347, 7640 }
aData2:= { 7520000, 11220760, 9745154, 10125000, 12210000 }
// Modify aData2 array values to fit chart scale
for i = 1 to len(aData2)
aData2[i] := aData2[i] / 1000 * 2.1
next
DEFINE DIALOG oDlg;
SIZE 600, 500
@ 1, 1 GRAPH oGraph;
SIZE 285, 220;
TYPE 3;
YVALUES 3D XGRID YGRID XVALUES LEGENDS
oGraph:nPoint:=1
//msgInfo( oGraph:nPenWidth)
oGraph:nPenWidth:=5 // has no effect on pen width. (bug?)
oGraph:nType := 3 // 3=line chart
oGraph:cSubTit:= "Oil & Gas Flow Rates"
oGraph:aSeries = { { "Crude Oil MBD", CLR_HBLUE ,, },{ "Gas MMPCD", CLR_HRED ,, }}
oGraph:aData = { aData1 , aData2 }
// Y-axis data. Note they are incorrectly labled "X"
oGraph:nMaxVal:= 30000
oGraph:nXRanges:= 6 // number of y-axis label increments
oGraph:cTitX := "Oil Flow Rate MBD"
// X-Axis data. Note that they are incorrectly labled with a "Y"
oGraph:aYVals = { "1", "2", "3", "4", "5" } // Should these be dates?
oGraph:cTitY:="Days?"
ACTIVATE DIALOG oDlg;
CENTER
//msgInfo( oGraph:nPenWidth )
RETURN NIL
// EOF
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
- Marc Venken
- Posts: 727
- Joined: Tue Jun 14, 2016 7:51 am
- hebert_j_vargas
- Posts: 94
- Joined: Thu Aug 02, 2012 3:21 pm
Re: TGraph 2 Y-axis for different's scales
Thank's James, I already did it, I think I'll give it a try modifying the tgraph class to show 2 Y-axis, and adding some required features as placing legends on top, left,right and bottom of the graph.James Bott wrote:Here's the source. Remember, don't copy it using MS Edge.
James
Code: Select all
/* Purpose: Test charting to items with vastly different scales on the same chart Author : James Bott For : Hebert Vargas Date : 08/07/2017 07:28:29 AM */ #include "Fivewin.ch" #include "TGraph.ch" FUNCTION MAIN() LOCAL oDlg, oGraph, aData1, aData2, i // Assign the data aData1:= { 14280, 20420, 12870, 25347, 7640 } aData2:= { 7520000, 11220760, 9745154, 10125000, 12210000 } // Modify aData2 array values to fit chart scale for i = 1 to len(aData2) aData2[i] := aData2[i] / 1000 * 2.1 next DEFINE DIALOG oDlg; SIZE 600, 500 @ 1, 1 GRAPH oGraph; SIZE 285, 220; TYPE 3; YVALUES 3D XGRID YGRID XVALUES LEGENDS oGraph:nPoint:=1 //msgInfo( oGraph:nPenWidth) oGraph:nPenWidth:=5 // has no effect on pen width. (bug?) oGraph:nType := 3 // 3=line chart oGraph:cSubTit:= "Oil & Gas Flow Rates" oGraph:aSeries = { { "Crude Oil MBD", CLR_HBLUE ,, },{ "Gas MMPCD", CLR_HRED ,, }} oGraph:aData = { aData1 , aData2 } // Y-axis data. Note they are incorrectly labled "X" oGraph:nMaxVal:= 30000 oGraph:nXRanges:= 6 // number of y-axis label increments oGraph:cTitX := "Oil Flow Rate MBD" // X-Axis data. Note that they are incorrectly labled with a "Y" oGraph:aYVals = { "1", "2", "3", "4", "5" } // Should these be dates? oGraph:cTitY:="Days?" ACTIVATE DIALOG oDlg; CENTER //msgInfo( oGraph:nPenWidth ) RETURN NIL // EOF
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
FiveWin Version: FWHX 15.01
BCC 5.8.2
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: TGraph 2 Y-axis for different's scales
I appreciate your ingenuity in finding a nice workaround.
Now TGraph does not support 2 Y-Axis and we all agree that this is a required feature.
We shall provide this very soon.
Now TGraph does not support 2 Y-Axis and we all agree that this is a required feature.
We shall provide this very soon.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: TGraph 2 Y-axis for different's scales
Nages,
TGraph is a great class, however, it does have it's shortcomings.
Most of the variable names are very cryptic and many are misleading which causes constant confusion. For instance, the X and Y axis variables are swapped. The X variables are really for the Y-axis and visa versa. Very confusing.
For instance, these are for the Y-axis and either do not contain a "Y" or contain an "X" instead:
nMaxVal - This is actually the maximum value of the Y-axis but is not labeled with a "Y" and there is no setting for the maximum X-axis. The variable name should be nYMaxValue.
nXRanges - number of Y-axis label increments. This would be better labeled nYIncrements
cTitX - This is for the Y-axis and would be better named cYTitle. One wonders, why was it abbreviated to save two characters in the name.
These are for the X-axis and are mistakenly labeled with a "Y" instead:
aYVals - list of X-axis values for increment labels. Should be aXIncrementValues
cTitY – This is the title for the X-axis. It should be cXTitle.
These are just some examples–there are many more.
One other issue that the X-axis can only be used as a time-series type increment (i.e. you can’t put points between the X-axis increments). This makes the class very limited.
Of course, changing variable names will break existing code, so I suggest creating a new class instead of making any changes to the existing one.
I’m sure others will have some input on this as well.
Oh, I should also note that the wiki for the TGraph class has the wrong descriptions for the variables for the X and Y axises.
James
TGraph is a great class, however, it does have it's shortcomings.
Most of the variable names are very cryptic and many are misleading which causes constant confusion. For instance, the X and Y axis variables are swapped. The X variables are really for the Y-axis and visa versa. Very confusing.
For instance, these are for the Y-axis and either do not contain a "Y" or contain an "X" instead:
nMaxVal - This is actually the maximum value of the Y-axis but is not labeled with a "Y" and there is no setting for the maximum X-axis. The variable name should be nYMaxValue.
nXRanges - number of Y-axis label increments. This would be better labeled nYIncrements
cTitX - This is for the Y-axis and would be better named cYTitle. One wonders, why was it abbreviated to save two characters in the name.
These are for the X-axis and are mistakenly labeled with a "Y" instead:
aYVals - list of X-axis values for increment labels. Should be aXIncrementValues
cTitY – This is the title for the X-axis. It should be cXTitle.
These are just some examples–there are many more.
One other issue that the X-axis can only be used as a time-series type increment (i.e. you can’t put points between the X-axis increments). This makes the class very limited.
Of course, changing variable names will break existing code, so I suggest creating a new class instead of making any changes to the existing one.
I’m sure others will have some input on this as well.
Oh, I should also note that the wiki for the TGraph class has the wrong descriptions for the variables for the X and Y axises.
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10