Stacking two graphs with different x and y scale on the same graph

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Stacking two graphs with different x and y scale on the same graph

Ogbos
Dear Contributors,
I have two data. A is of the form:
05 01 01  -0.00376058013285748
05 01 02  -0.0765481943910918
05 01 03  -1.28158758599964
05 01 04  -1.51612545416506
05 01 05  -1.39481276373467
05 01 06  -1.17644992095997
05 01 07  -0.788249311582716
05 01 08  -0.925737027403825
05 01 09  -1.02278717974814
05 01 10  -0.982349616271341
05 01 11  -0.61032403228481
05 01 12  -0.197860884821482
05 01 13  -0.173598346735404
05 01 14  -0.270648499079717
05 01 15  -0.173598346735404
05 01 16  -0.343436113337951
05 01 17  -0.949999565489903
05 01 18  -3.60270372956778
05 01 19  -5.47091916219579
05 01 20  -4.67834291805057
05 01 21  -5.42239408602363
05 01 22  -4.19309215632901
05 01 23  -1.79918839850264
05 01 24  -1.04704971783422
05 01 25  -0.642674083066247
05 01 26  -0.505186367245138
05 01 27  -0.472836316463701
05 01 28  -0.537536418026576
05 01 29  -0.311086062556513
05 01 30  -0.00376058013285748
05 01 31  -0.254473473688998
05 02 01  -0.197860884821482
05 02 02  -0.23021093560292
05 02 03  -0.238298448298279
05 02 04  -0.157423321344685
05 02 05  -0.060373169000373
05 02 06  0.109464597602174
05 02 07  0.02858947064858
05 02 08  -0.0846357070864511
05 02 09  -0.189773372126123
05 02 10  -0.278736011775076
05 02 11  -0.302998549861154
05 02 12  -0.0684606816957324
05 02 13  0.0852020595160955
05 02 14  0.133727135688252
05 02 15  0.0528520087346581
05 02 16  0.0771145468207362
05 02 17  -0.0361106309142949
05 02 18  -0.205948397516842
05 02 19  -0.383873676814748
05 02 20  -0.383873676814748
05 02 21  -0.294911037165795
05 02 22  -0.197860884821482
05 02 23  -0.214035910212201
05 02 24  -0.165510834040045
05 02 25  -0.0522856563050137
05 02 26  0.0366769833439393
05 02 27  0.141814648383611
05 02 28  0.101377084906814
05 03 01  0.15798967377433
05 03 02  0.222689775337205
05 03 03  0.27930236420472
05 03 04  0.327827440376876
05 03 05  0.214602262641845
05 03 06  0.133727135688252
05 03 07  0.166077186469689
 and B is of the form:
05 01 03  1.0401704890785
05 01 04  1.1881431442713
05 01 05  0.899433543239033
05 01 06  0.495029973508058
05 01 18  2.51141960034673
05 01 19  4.80818567931821
05 01 20  3.82649399122216
05 01 21  4.75619054623929
05 01 22  3.25702525028531
05 01 23  0.328654748869008
05 02 10  0.0689360507407491
05 02 11  0.192369729879942
05 02 15  0.0684297713902015
05 02 16  0.100584435166215
05 02 17  0.295302934161718
05 02 18  0.552388788420635
05 02 19  0.811732847306371
05 02 20  0.843313045760178
05 02 21  0.757193220375875
05 02 22  0.65352100387166
05 02 23  0.68252482652902
05 02 24  0.624510062816789
05 02 25  0.479854370620533
05 02 26  0.359002279153697
05 02 27  0.212459089641907
05 02 28  0.240784160160447
05 03 01  0.144583652487177
05 03 02  0.0345028244394553
05 03 21  0.023582430982633
05 03 22  0.000293765928922767
05 03 27  0.0440288222469235
05 03 28  0.106263428254761
05 03 29  0.291212461872628
05 03 30  0.198305017329253
05 03 31  0.186935599530143
05 04 01  0.316471519561273
05 04 02  0.266260602009615
05 04 03  0.0456391152384458
05 04 04  0.113939833419049
05 04 05  0.140500137811164
05 04 06  0.374670064516577
05 04 07  0.295820206701906
05 04 08  0.0833493810907385
05 04 10  0.0253248646840757
05 04 11  0.188773903020133
05 04 12  0.206619775067284
05 04 13  0.408503282817833
05 04 14  0.344129922512134
05 04 15  0.283273728250647
05 04 16  0.155780334719261
05 04 17  0.0815692243668445
B is extracted from A and I wish to plot A and B on the same x-axis
but different y axis on the same graph. Stacking very close helps to
illustrates the common rapid variations in A, represented in B.

One of the codes I tried without success is:
data <- read.table("A", col.names = c("year", "month", "day", "counts"))

new.century <- data$year < 50

data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)

data$date <- as.Date(ISOdate(data$year, data$month, data$day))
x1 = data$date
y1=data$counts
#y1=scale(data$counts)


data <- read.table("B", col.names = c("year", "month", "day", "counts"))

new.century <- data$year < 50

data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)

data$date <- as.Date(ISOdate(data$year, data$month, data$day))
x2 = data$date
y2=data$counts


pdf("PLOT.pdf")

 par(mar=c(5,5,5,5))

plot(x1,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-5.470919,1.298329),ylab="")
axis(side=2, at=c(-6,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=TRUE)
plot(x2,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(-4.808186,0.0), ylab="")
axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=100)
dev.off()

Your assistance is ever appreciated.
Best wishes
Ogbos

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Stacking two graphs with different x and y scale on the same graph

Rui Barradas
Hello,

The following is not a complete solution, the axis ranges are wrong, but
it gets you closer, I think.


op <- par(mar = c(5, 5, 5, 5))

plot(c(x1, x2), c(y1, y2), type = "n",xaxt="n", yaxt="n",
      ylim = range(c(y1, y2)))

par(new=TRUE)
plot(x1,y1,pch=0,type="b",col="red",yaxt="n",
      xlab = "", ylab="")
axis(side=2, at=c(-5,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=TRUE)
plot(x2, y2, pch = 1,type="b",col="blue",
      xaxt="n", yaxt="n",
      xlab="", ylab="")
axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=0)

par(op)



Hope this helps,

Rui Barradas

Às 02:53 de 27/11/19, Ogbos Okike escreveu:

> Dear Contributors,
> I have two data. A is of the form:
> 05 01 01  -0.00376058013285748
> 05 01 02  -0.0765481943910918
> 05 01 03  -1.28158758599964
> 05 01 04  -1.51612545416506
> 05 01 05  -1.39481276373467
> 05 01 06  -1.17644992095997
> 05 01 07  -0.788249311582716
> 05 01 08  -0.925737027403825
> 05 01 09  -1.02278717974814
> 05 01 10  -0.982349616271341
> 05 01 11  -0.61032403228481
> 05 01 12  -0.197860884821482
> 05 01 13  -0.173598346735404
> 05 01 14  -0.270648499079717
> 05 01 15  -0.173598346735404
> 05 01 16  -0.343436113337951
> 05 01 17  -0.949999565489903
> 05 01 18  -3.60270372956778
> 05 01 19  -5.47091916219579
> 05 01 20  -4.67834291805057
> 05 01 21  -5.42239408602363
> 05 01 22  -4.19309215632901
> 05 01 23  -1.79918839850264
> 05 01 24  -1.04704971783422
> 05 01 25  -0.642674083066247
> 05 01 26  -0.505186367245138
> 05 01 27  -0.472836316463701
> 05 01 28  -0.537536418026576
> 05 01 29  -0.311086062556513
> 05 01 30  -0.00376058013285748
> 05 01 31  -0.254473473688998
> 05 02 01  -0.197860884821482
> 05 02 02  -0.23021093560292
> 05 02 03  -0.238298448298279
> 05 02 04  -0.157423321344685
> 05 02 05  -0.060373169000373
> 05 02 06  0.109464597602174
> 05 02 07  0.02858947064858
> 05 02 08  -0.0846357070864511
> 05 02 09  -0.189773372126123
> 05 02 10  -0.278736011775076
> 05 02 11  -0.302998549861154
> 05 02 12  -0.0684606816957324
> 05 02 13  0.0852020595160955
> 05 02 14  0.133727135688252
> 05 02 15  0.0528520087346581
> 05 02 16  0.0771145468207362
> 05 02 17  -0.0361106309142949
> 05 02 18  -0.205948397516842
> 05 02 19  -0.383873676814748
> 05 02 20  -0.383873676814748
> 05 02 21  -0.294911037165795
> 05 02 22  -0.197860884821482
> 05 02 23  -0.214035910212201
> 05 02 24  -0.165510834040045
> 05 02 25  -0.0522856563050137
> 05 02 26  0.0366769833439393
> 05 02 27  0.141814648383611
> 05 02 28  0.101377084906814
> 05 03 01  0.15798967377433
> 05 03 02  0.222689775337205
> 05 03 03  0.27930236420472
> 05 03 04  0.327827440376876
> 05 03 05  0.214602262641845
> 05 03 06  0.133727135688252
> 05 03 07  0.166077186469689
>   and B is of the form:
> 05 01 03  1.0401704890785
> 05 01 04  1.1881431442713
> 05 01 05  0.899433543239033
> 05 01 06  0.495029973508058
> 05 01 18  2.51141960034673
> 05 01 19  4.80818567931821
> 05 01 20  3.82649399122216
> 05 01 21  4.75619054623929
> 05 01 22  3.25702525028531
> 05 01 23  0.328654748869008
> 05 02 10  0.0689360507407491
> 05 02 11  0.192369729879942
> 05 02 15  0.0684297713902015
> 05 02 16  0.100584435166215
> 05 02 17  0.295302934161718
> 05 02 18  0.552388788420635
> 05 02 19  0.811732847306371
> 05 02 20  0.843313045760178
> 05 02 21  0.757193220375875
> 05 02 22  0.65352100387166
> 05 02 23  0.68252482652902
> 05 02 24  0.624510062816789
> 05 02 25  0.479854370620533
> 05 02 26  0.359002279153697
> 05 02 27  0.212459089641907
> 05 02 28  0.240784160160447
> 05 03 01  0.144583652487177
> 05 03 02  0.0345028244394553
> 05 03 21  0.023582430982633
> 05 03 22  0.000293765928922767
> 05 03 27  0.0440288222469235
> 05 03 28  0.106263428254761
> 05 03 29  0.291212461872628
> 05 03 30  0.198305017329253
> 05 03 31  0.186935599530143
> 05 04 01  0.316471519561273
> 05 04 02  0.266260602009615
> 05 04 03  0.0456391152384458
> 05 04 04  0.113939833419049
> 05 04 05  0.140500137811164
> 05 04 06  0.374670064516577
> 05 04 07  0.295820206701906
> 05 04 08  0.0833493810907385
> 05 04 10  0.0253248646840757
> 05 04 11  0.188773903020133
> 05 04 12  0.206619775067284
> 05 04 13  0.408503282817833
> 05 04 14  0.344129922512134
> 05 04 15  0.283273728250647
> 05 04 16  0.155780334719261
> 05 04 17  0.0815692243668445
> B is extracted from A and I wish to plot A and B on the same x-axis
> but different y axis on the same graph. Stacking very close helps to
> illustrates the common rapid variations in A, represented in B.
>
> One of the codes I tried without success is:
> data <- read.table("A", col.names = c("year", "month", "day", "counts"))
>
> new.century <- data$year < 50
>
> data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
>
> data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> x1 = data$date
> y1=data$counts
> #y1=scale(data$counts)
>
>
> data <- read.table("B", col.names = c("year", "month", "day", "counts"))
>
> new.century <- data$year < 50
>
> data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
>
> data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> x2 = data$date
> y2=data$counts
>
>
> pdf("PLOT.pdf")
>
>   par(mar=c(5,5,5,5))
>
> plot(x1,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-5.470919,1.298329),ylab="")
> axis(side=2, at=c(-6,0,2))
> mtext("red line", side = 2, line=2.5, at=0)
>
> par(new=TRUE)
> plot(x2,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(-4.808186,0.0), ylab="")
> axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> mtext("blue line", side=4, line=2.5, at=100)
> dev.off()
>
> Your assistance is ever appreciated.
> Best wishes
> Ogbos
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Stacking two graphs with different x and y scale on the same graph

Ogbos
Dear Rui,
Many thanks. It is indeed close to what I am looking for apart from
the issues on the axes.

I am attaching the result plot. The minimum and maximum values of y1
are respectively -5.470919 and 1.298329 while they are 0.0002937659
and 4.808186 for y2.

New problems are: (1) I can't labelled the axis as (x1,x2) persist
when I tried to label the axes. (2) The two plots are merging at some
points. I only want them close but not merging as that does not allow
for meaningful comparison.

It would be great if you could adjust the code further to minimize
these problems.

Thank you.
Best wishes
Ogbos

On Wed, Nov 27, 2019 at 7:58 AM Rui Barradas <[hidden email]> wrote:

>
> Hello,
>
> The following is not a complete solution, the axis ranges are wrong, but
> it gets you closer, I think.
>
>
> op <- par(mar = c(5, 5, 5, 5))
>
> plot(c(x1, x2), c(y1, y2), type = "n",xaxt="n", yaxt="n",
>       ylim = range(c(y1, y2)))
>
> par(new=TRUE)
> plot(x1,y1,pch=0,type="b",col="red",yaxt="n",
>       xlab = "", ylab="")
> axis(side=2, at=c(-5,0,2))
> mtext("red line", side = 2, line=2.5, at=0)
>
> par(new=TRUE)
> plot(x2, y2, pch = 1,type="b",col="blue",
>       xaxt="n", yaxt="n",
>       xlab="", ylab="")
> axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> mtext("blue line", side=4, line=2.5, at=0)
>
> par(op)
>
>
>
> Hope this helps,
>
> Rui Barradas
>
> Às 02:53 de 27/11/19, Ogbos Okike escreveu:
> > Dear Contributors,
> > I have two data. A is of the form:
> > 05 01 01  -0.00376058013285748
> > 05 01 02  -0.0765481943910918
> > 05 01 03  -1.28158758599964
> > 05 01 04  -1.51612545416506
> > 05 01 05  -1.39481276373467
> > 05 01 06  -1.17644992095997
> > 05 01 07  -0.788249311582716
> > 05 01 08  -0.925737027403825
> > 05 01 09  -1.02278717974814
> > 05 01 10  -0.982349616271341
> > 05 01 11  -0.61032403228481
> > 05 01 12  -0.197860884821482
> > 05 01 13  -0.173598346735404
> > 05 01 14  -0.270648499079717
> > 05 01 15  -0.173598346735404
> > 05 01 16  -0.343436113337951
> > 05 01 17  -0.949999565489903
> > 05 01 18  -3.60270372956778
> > 05 01 19  -5.47091916219579
> > 05 01 20  -4.67834291805057
> > 05 01 21  -5.42239408602363
> > 05 01 22  -4.19309215632901
> > 05 01 23  -1.79918839850264
> > 05 01 24  -1.04704971783422
> > 05 01 25  -0.642674083066247
> > 05 01 26  -0.505186367245138
> > 05 01 27  -0.472836316463701
> > 05 01 28  -0.537536418026576
> > 05 01 29  -0.311086062556513
> > 05 01 30  -0.00376058013285748
> > 05 01 31  -0.254473473688998
> > 05 02 01  -0.197860884821482
> > 05 02 02  -0.23021093560292
> > 05 02 03  -0.238298448298279
> > 05 02 04  -0.157423321344685
> > 05 02 05  -0.060373169000373
> > 05 02 06  0.109464597602174
> > 05 02 07  0.02858947064858
> > 05 02 08  -0.0846357070864511
> > 05 02 09  -0.189773372126123
> > 05 02 10  -0.278736011775076
> > 05 02 11  -0.302998549861154
> > 05 02 12  -0.0684606816957324
> > 05 02 13  0.0852020595160955
> > 05 02 14  0.133727135688252
> > 05 02 15  0.0528520087346581
> > 05 02 16  0.0771145468207362
> > 05 02 17  -0.0361106309142949
> > 05 02 18  -0.205948397516842
> > 05 02 19  -0.383873676814748
> > 05 02 20  -0.383873676814748
> > 05 02 21  -0.294911037165795
> > 05 02 22  -0.197860884821482
> > 05 02 23  -0.214035910212201
> > 05 02 24  -0.165510834040045
> > 05 02 25  -0.0522856563050137
> > 05 02 26  0.0366769833439393
> > 05 02 27  0.141814648383611
> > 05 02 28  0.101377084906814
> > 05 03 01  0.15798967377433
> > 05 03 02  0.222689775337205
> > 05 03 03  0.27930236420472
> > 05 03 04  0.327827440376876
> > 05 03 05  0.214602262641845
> > 05 03 06  0.133727135688252
> > 05 03 07  0.166077186469689
> >   and B is of the form:
> > 05 01 03  1.0401704890785
> > 05 01 04  1.1881431442713
> > 05 01 05  0.899433543239033
> > 05 01 06  0.495029973508058
> > 05 01 18  2.51141960034673
> > 05 01 19  4.80818567931821
> > 05 01 20  3.82649399122216
> > 05 01 21  4.75619054623929
> > 05 01 22  3.25702525028531
> > 05 01 23  0.328654748869008
> > 05 02 10  0.0689360507407491
> > 05 02 11  0.192369729879942
> > 05 02 15  0.0684297713902015
> > 05 02 16  0.100584435166215
> > 05 02 17  0.295302934161718
> > 05 02 18  0.552388788420635
> > 05 02 19  0.811732847306371
> > 05 02 20  0.843313045760178
> > 05 02 21  0.757193220375875
> > 05 02 22  0.65352100387166
> > 05 02 23  0.68252482652902
> > 05 02 24  0.624510062816789
> > 05 02 25  0.479854370620533
> > 05 02 26  0.359002279153697
> > 05 02 27  0.212459089641907
> > 05 02 28  0.240784160160447
> > 05 03 01  0.144583652487177
> > 05 03 02  0.0345028244394553
> > 05 03 21  0.023582430982633
> > 05 03 22  0.000293765928922767
> > 05 03 27  0.0440288222469235
> > 05 03 28  0.106263428254761
> > 05 03 29  0.291212461872628
> > 05 03 30  0.198305017329253
> > 05 03 31  0.186935599530143
> > 05 04 01  0.316471519561273
> > 05 04 02  0.266260602009615
> > 05 04 03  0.0456391152384458
> > 05 04 04  0.113939833419049
> > 05 04 05  0.140500137811164
> > 05 04 06  0.374670064516577
> > 05 04 07  0.295820206701906
> > 05 04 08  0.0833493810907385
> > 05 04 10  0.0253248646840757
> > 05 04 11  0.188773903020133
> > 05 04 12  0.206619775067284
> > 05 04 13  0.408503282817833
> > 05 04 14  0.344129922512134
> > 05 04 15  0.283273728250647
> > 05 04 16  0.155780334719261
> > 05 04 17  0.0815692243668445
> > B is extracted from A and I wish to plot A and B on the same x-axis
> > but different y axis on the same graph. Stacking very close helps to
> > illustrates the common rapid variations in A, represented in B.
> >
> > One of the codes I tried without success is:
> > data <- read.table("A", col.names = c("year", "month", "day", "counts"))
> >
> > new.century <- data$year < 50
> >
> > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> >
> > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > x1 = data$date
> > y1=data$counts
> > #y1=scale(data$counts)
> >
> >
> > data <- read.table("B", col.names = c("year", "month", "day", "counts"))
> >
> > new.century <- data$year < 50
> >
> > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> >
> > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > x2 = data$date
> > y2=data$counts
> >
> >
> > pdf("PLOT.pdf")
> >
> >   par(mar=c(5,5,5,5))
> >
> > plot(x1,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-5.470919,1.298329),ylab="")
> > axis(side=2, at=c(-6,0,2))
> > mtext("red line", side = 2, line=2.5, at=0)
> >
> > par(new=TRUE)
> > plot(x2,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(-4.808186,0.0), ylab="")
> > axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> > mtext("blue line", side=4, line=2.5, at=100)
> > dev.off()
> >
> > Your assistance is ever appreciated.
> > Best wishes
> > Ogbos
> >
> > ______________________________________________
> > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

TEST.pdf (10K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Stacking two graphs with different x and y scale on the same graph

PIKAL Petr
In reply to this post by Rui Barradas
Hi

In ancient times I developped function plot.yy which requires some data twisting but should do plotting with one x axis and two y axes and should estimete ranges automatically.

datA <- data.frame(datum=x1, counts=y1)
datA$vzor <- "A"
datB <- data.frame(datum=x2, counts=y2)
datB$vzor <- "B"
mydat <- merge(datA, datB, all=T, by="datum")

plot.yy(mydat$datum, mydat$counts.x, mydat$counts.y, col=c("red", "blue"), linky=T)


## The function is currently defined as
plot.yy <- function (x, yright, yleft, yleftlim = NULL, yrightlim = NULL,
    xlab = NULL, yylab = list(NA, NA), pch = c(1, 2),
    col = c(1,2), linky = F, smooth = 0, lwds = 1, length = 10,
        format = "%d/%m", rect = NULL, type = "p", ...)
{
    par(mar = c(5, 4, 4, 2), oma = c(0, 0, 0, 3))
    plot(x, yright, ylim = yrightlim, axes = F, ylab = "", xlab = xlab,
        pch = pch[1], col = col[1], type = type, ...)
    if (!is.null(rect))
        rect(x[rect[1]], rect[2], x[rect[3]], rect[4], col = "grey")
    points(x, yright, ylim = yrightlim, ylab = "", xlab = xlab,
        pch = pch[1], col = col[1], ...)
    axis(4, pretty(range(yright, na.rm = T), 10), col = col[1])
    if (linky)
        lines(x, yright, col = col[1], ...)
    if (smooth != 0)
        lines(supsmu(x, yright, span = smooth), col = col[1],
            lwd = lwds, ...)
    if (is.na(yylab[[1]]))
        mtext(deparse(substitute(yright)), side = 4, outer = T,
            line = 1, col = col[1], ...)
    else mtext(yylab[[1]], side = 4, outer = T, line = 1, col = col[1],
        ...)
    par(new = T)
    plot(x, yleft, ylim = yleftlim, ylab = "", axes = F, xlab = xlab,
        pch = pch[2], col = col[2], ...)
    box()
    axis(2, pretty(range(yleft, na.rm = T), 10), col = col[2],
        col.axis = col[2])
    if (!inherits(x, c("Date", "POSIXt")))
        axis(1, pretty(range(x, na.rm = T), 10))
    else {
        if (inherits(x, "POSIXt")) {
            l <- length(x)
            axis(1, at = x[seq(1, l, length = length)],
            labels = format(as.POSIXct(x[seq(1,l, length = length)]),
            format = format))
        }
        else {
            if (inherits(x, "Date")) {
                l <- length(x)
                axis(1, at = x[seq(1, l, length = length)],
                labels = format(as.Date(x[seq(1,l, length = length)]),
                format = format))
            }
            else {
                print("Not suitable x axis")
            }
        }
    }
    if (is.na(yylab[[2]]))
        mtext(deparse(substitute(yleft)), side = 2, line = 2,
            col = col[2], ...)
    else mtext(yylab[[2]], side = 2, line = 2, col = col[2],
        ...)
    if (linky)
        lines(x, yleft, col = col[2], lty = 2, ...)
    if (smooth != 0)
        lines(supsmu(x, yleft, span = smooth), col = col[2],
            lty = 2, lwd = lwds, ...)




> -----Original Message-----
> From: R-help <[hidden email]> On Behalf Of Rui Barradas
> Sent: Wednesday, November 27, 2019 7:59 AM
> To: Ogbos Okike <[hidden email]>; r-help <[hidden email]>
> Subject: Re: [R] Stacking two graphs with different x and y scale on the same
> graph
>
> Hello,
>
> The following is not a complete solution, the axis ranges are wrong, but it
> gets you closer, I think.
>
>
> op <- par(mar = c(5, 5, 5, 5))
>
> plot(c(x1, x2), c(y1, y2), type = "n",xaxt="n", yaxt="n",
>       ylim = range(c(y1, y2)))
>
> par(new=TRUE)
> plot(x1,y1,pch=0,type="b",col="red",yaxt="n",
>       xlab = "", ylab="")
> axis(side=2, at=c(-5,0,2))
> mtext("red line", side = 2, line=2.5, at=0)
>
> par(new=TRUE)
> plot(x2, y2, pch = 1,type="b",col="blue",
>       xaxt="n", yaxt="n",
>       xlab="", ylab="")
> axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> mtext("blue line", side=4, line=2.5, at=0)
>
> par(op)
>
>
>
> Hope this helps,
>
> Rui Barradas
>
> Às 02:53 de 27/11/19, Ogbos Okike escreveu:
> > Dear Contributors,
> > I have two data. A is of the form:
> > 05 01 01  -0.00376058013285748
> > 05 01 02  -0.0765481943910918
> > 05 01 03  -1.28158758599964
> > 05 01 04  -1.51612545416506
> > 05 01 05  -1.39481276373467
> > 05 01 06  -1.17644992095997
> > 05 01 07  -0.788249311582716
> > 05 01 08  -0.925737027403825
> > 05 01 09  -1.02278717974814
> > 05 01 10  -0.982349616271341
> > 05 01 11  -0.61032403228481
> > 05 01 12  -0.197860884821482
> > 05 01 13  -0.173598346735404
> > 05 01 14  -0.270648499079717
> > 05 01 15  -0.173598346735404
> > 05 01 16  -0.343436113337951
> > 05 01 17  -0.949999565489903
> > 05 01 18  -3.60270372956778
> > 05 01 19  -5.47091916219579
> > 05 01 20  -4.67834291805057
> > 05 01 21  -5.42239408602363
> > 05 01 22  -4.19309215632901
> > 05 01 23  -1.79918839850264
> > 05 01 24  -1.04704971783422
> > 05 01 25  -0.642674083066247
> > 05 01 26  -0.505186367245138
> > 05 01 27  -0.472836316463701
> > 05 01 28  -0.537536418026576
> > 05 01 29  -0.311086062556513
> > 05 01 30  -0.00376058013285748
> > 05 01 31  -0.254473473688998
> > 05 02 01  -0.197860884821482
> > 05 02 02  -0.23021093560292
> > 05 02 03  -0.238298448298279
> > 05 02 04  -0.157423321344685
> > 05 02 05  -0.060373169000373
> > 05 02 06  0.109464597602174
> > 05 02 07  0.02858947064858
> > 05 02 08  -0.0846357070864511
> > 05 02 09  -0.189773372126123
> > 05 02 10  -0.278736011775076
> > 05 02 11  -0.302998549861154
> > 05 02 12  -0.0684606816957324
> > 05 02 13  0.0852020595160955
> > 05 02 14  0.133727135688252
> > 05 02 15  0.0528520087346581
> > 05 02 16  0.0771145468207362
> > 05 02 17  -0.0361106309142949
> > 05 02 18  -0.205948397516842
> > 05 02 19  -0.383873676814748
> > 05 02 20  -0.383873676814748
> > 05 02 21  -0.294911037165795
> > 05 02 22  -0.197860884821482
> > 05 02 23  -0.214035910212201
> > 05 02 24  -0.165510834040045
> > 05 02 25  -0.0522856563050137
> > 05 02 26  0.0366769833439393
> > 05 02 27  0.141814648383611
> > 05 02 28  0.101377084906814
> > 05 03 01  0.15798967377433
> > 05 03 02  0.222689775337205
> > 05 03 03  0.27930236420472
> > 05 03 04  0.327827440376876
> > 05 03 05  0.214602262641845
> > 05 03 06  0.133727135688252
> > 05 03 07  0.166077186469689
> >   and B is of the form:
> > 05 01 03  1.0401704890785
> > 05 01 04  1.1881431442713
> > 05 01 05  0.899433543239033
> > 05 01 06  0.495029973508058
> > 05 01 18  2.51141960034673
> > 05 01 19  4.80818567931821
> > 05 01 20  3.82649399122216
> > 05 01 21  4.75619054623929
> > 05 01 22  3.25702525028531
> > 05 01 23  0.328654748869008
> > 05 02 10  0.0689360507407491
> > 05 02 11  0.192369729879942
> > 05 02 15  0.0684297713902015
> > 05 02 16  0.100584435166215
> > 05 02 17  0.295302934161718
> > 05 02 18  0.552388788420635
> > 05 02 19  0.811732847306371
> > 05 02 20  0.843313045760178
> > 05 02 21  0.757193220375875
> > 05 02 22  0.65352100387166
> > 05 02 23  0.68252482652902
> > 05 02 24  0.624510062816789
> > 05 02 25  0.479854370620533
> > 05 02 26  0.359002279153697
> > 05 02 27  0.212459089641907
> > 05 02 28  0.240784160160447
> > 05 03 01  0.144583652487177
> > 05 03 02  0.0345028244394553
> > 05 03 21  0.023582430982633
> > 05 03 22  0.000293765928922767
> > 05 03 27  0.0440288222469235
> > 05 03 28  0.106263428254761
> > 05 03 29  0.291212461872628
> > 05 03 30  0.198305017329253
> > 05 03 31  0.186935599530143
> > 05 04 01  0.316471519561273
> > 05 04 02  0.266260602009615
> > 05 04 03  0.0456391152384458
> > 05 04 04  0.113939833419049
> > 05 04 05  0.140500137811164
> > 05 04 06  0.374670064516577
> > 05 04 07  0.295820206701906
> > 05 04 08  0.0833493810907385
> > 05 04 10  0.0253248646840757
> > 05 04 11  0.188773903020133
> > 05 04 12  0.206619775067284
> > 05 04 13  0.408503282817833
> > 05 04 14  0.344129922512134
> > 05 04 15  0.283273728250647
> > 05 04 16  0.155780334719261
> > 05 04 17  0.0815692243668445
> > B is extracted from A and I wish to plot A and B on the same x-axis
> > but different y axis on the same graph. Stacking very close helps to
> > illustrates the common rapid variations in A, represented in B.
> >
> > One of the codes I tried without success is:
> > data <- read.table("A", col.names = c("year", "month", "day", "counts"))
> >
> > new.century <- data$year < 50
> >
> > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> >
> > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > x1 = data$date
> > y1=data$counts
> > #y1=scale(data$counts)
> >
> >
> > data <- read.table("B", col.names = c("year", "month", "day", "counts"))
> >
> > new.century <- data$year < 50
> >
> > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> >
> > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > x2 = data$date
> > y2=data$counts
> >
> >
> > pdf("PLOT.pdf")
> >
> >   par(mar=c(5,5,5,5))
> >
> > plot(x1,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-
> 5.470919,1.298329),ylab="")
> > axis(side=2, at=c(-6,0,2))
> > mtext("red line", side = 2, line=2.5, at=0)
> >
> > par(new=TRUE)
> > plot(x2,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(-4.808186,0.0),
> ylab="")
> > axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> > mtext("blue line", side=4, line=2.5, at=100)
> > dev.off()
> >
> > Your assistance is ever appreciated.
> > Best wishes
> > Ogbos
> >
> > ______________________________________________
> > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Stacking two graphs with different x and y scale on the same graph

PIKAL Petr
In reply to this post by Ogbos
Hm,

I just wonder why you do not use ggplot?

datA <- data.frame(datum=x1, counts=y1)
datA$vzor <- "A"
datB <- data.frame(datum=x2, counts=y2)
datB$vzor <- "B"
mydat <- merge(datA, datB, all=T)

library(ggplot2)
p <- ggplot(mydat, aes(x=datum, y=counts, colour=vzor))
p+geom_point(size=3)+geom_line()

The only problem is that it uses only one y axis but allows extensive annotation changing.

Even axes range manipulation is possible, although not recommended.
http://rpubs.com/kohske/dual_axis_in_ggplot2

Cheers
Petr

> -----Original Message-----
> From: R-help <[hidden email]> On Behalf Of Ogbos Okike
> Sent: Wednesday, November 27, 2019 8:56 AM
> To: Rui Barradas <[hidden email]>
> Cc: r-help <[hidden email]>
> Subject: Re: [R] Stacking two graphs with different x and y scale on the same
> graph
>
> Dear Rui,
> Many thanks. It is indeed close to what I am looking for apart from the issues
> on the axes.
>
> I am attaching the result plot. The minimum and maximum values of y1 are
> respectively -5.470919 and 1.298329 while they are 0.0002937659 and
> 4.808186 for y2.
>
> New problems are: (1) I can't labelled the axis as (x1,x2) persist when I tried
> to label the axes. (2) The two plots are merging at some points. I only want
> them close but not merging as that does not allow for meaningful
> comparison.
>
> It would be great if you could adjust the code further to minimize these
> problems.
>
> Thank you.
> Best wishes
> Ogbos
>
> On Wed, Nov 27, 2019 at 7:58 AM Rui Barradas <[hidden email]>
> wrote:
> >
> > Hello,
> >
> > The following is not a complete solution, the axis ranges are wrong,
> > but it gets you closer, I think.
> >
> >
> > op <- par(mar = c(5, 5, 5, 5))
> >
> > plot(c(x1, x2), c(y1, y2), type = "n",xaxt="n", yaxt="n",
> >       ylim = range(c(y1, y2)))
> >
> > par(new=TRUE)
> > plot(x1,y1,pch=0,type="b",col="red",yaxt="n",
> >       xlab = "", ylab="")
> > axis(side=2, at=c(-5,0,2))
> > mtext("red line", side = 2, line=2.5, at=0)
> >
> > par(new=TRUE)
> > plot(x2, y2, pch = 1,type="b",col="blue",
> >       xaxt="n", yaxt="n",
> >       xlab="", ylab="")
> > axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%")) mtext("blue
> > line", side=4, line=2.5, at=0)
> >
> > par(op)
> >
> >
> >
> > Hope this helps,
> >
> > Rui Barradas
> >
> > Às 02:53 de 27/11/19, Ogbos Okike escreveu:
> > > Dear Contributors,
> > > I have two data. A is of the form:
> > > 05 01 01  -0.00376058013285748
> > > 05 01 02  -0.0765481943910918
> > > 05 01 03  -1.28158758599964
> > > 05 01 04  -1.51612545416506
> > > 05 01 05  -1.39481276373467
> > > 05 01 06  -1.17644992095997
> > > 05 01 07  -0.788249311582716
> > > 05 01 08  -0.925737027403825
> > > 05 01 09  -1.02278717974814
> > > 05 01 10  -0.982349616271341
> > > 05 01 11  -0.61032403228481
> > > 05 01 12  -0.197860884821482
> > > 05 01 13  -0.173598346735404
> > > 05 01 14  -0.270648499079717
> > > 05 01 15  -0.173598346735404
> > > 05 01 16  -0.343436113337951
> > > 05 01 17  -0.949999565489903
> > > 05 01 18  -3.60270372956778
> > > 05 01 19  -5.47091916219579
> > > 05 01 20  -4.67834291805057
> > > 05 01 21  -5.42239408602363
> > > 05 01 22  -4.19309215632901
> > > 05 01 23  -1.79918839850264
> > > 05 01 24  -1.04704971783422
> > > 05 01 25  -0.642674083066247
> > > 05 01 26  -0.505186367245138
> > > 05 01 27  -0.472836316463701
> > > 05 01 28  -0.537536418026576
> > > 05 01 29  -0.311086062556513
> > > 05 01 30  -0.00376058013285748
> > > 05 01 31  -0.254473473688998
> > > 05 02 01  -0.197860884821482
> > > 05 02 02  -0.23021093560292
> > > 05 02 03  -0.238298448298279
> > > 05 02 04  -0.157423321344685
> > > 05 02 05  -0.060373169000373
> > > 05 02 06  0.109464597602174
> > > 05 02 07  0.02858947064858
> > > 05 02 08  -0.0846357070864511
> > > 05 02 09  -0.189773372126123
> > > 05 02 10  -0.278736011775076
> > > 05 02 11  -0.302998549861154
> > > 05 02 12  -0.0684606816957324
> > > 05 02 13  0.0852020595160955
> > > 05 02 14  0.133727135688252
> > > 05 02 15  0.0528520087346581
> > > 05 02 16  0.0771145468207362
> > > 05 02 17  -0.0361106309142949
> > > 05 02 18  -0.205948397516842
> > > 05 02 19  -0.383873676814748
> > > 05 02 20  -0.383873676814748
> > > 05 02 21  -0.294911037165795
> > > 05 02 22  -0.197860884821482
> > > 05 02 23  -0.214035910212201
> > > 05 02 24  -0.165510834040045
> > > 05 02 25  -0.0522856563050137
> > > 05 02 26  0.0366769833439393
> > > 05 02 27  0.141814648383611
> > > 05 02 28  0.101377084906814
> > > 05 03 01  0.15798967377433
> > > 05 03 02  0.222689775337205
> > > 05 03 03  0.27930236420472
> > > 05 03 04  0.327827440376876
> > > 05 03 05  0.214602262641845
> > > 05 03 06  0.133727135688252
> > > 05 03 07  0.166077186469689
> > >   and B is of the form:
> > > 05 01 03  1.0401704890785
> > > 05 01 04  1.1881431442713
> > > 05 01 05  0.899433543239033
> > > 05 01 06  0.495029973508058
> > > 05 01 18  2.51141960034673
> > > 05 01 19  4.80818567931821
> > > 05 01 20  3.82649399122216
> > > 05 01 21  4.75619054623929
> > > 05 01 22  3.25702525028531
> > > 05 01 23  0.328654748869008
> > > 05 02 10  0.0689360507407491
> > > 05 02 11  0.192369729879942
> > > 05 02 15  0.0684297713902015
> > > 05 02 16  0.100584435166215
> > > 05 02 17  0.295302934161718
> > > 05 02 18  0.552388788420635
> > > 05 02 19  0.811732847306371
> > > 05 02 20  0.843313045760178
> > > 05 02 21  0.757193220375875
> > > 05 02 22  0.65352100387166
> > > 05 02 23  0.68252482652902
> > > 05 02 24  0.624510062816789
> > > 05 02 25  0.479854370620533
> > > 05 02 26  0.359002279153697
> > > 05 02 27  0.212459089641907
> > > 05 02 28  0.240784160160447
> > > 05 03 01  0.144583652487177
> > > 05 03 02  0.0345028244394553
> > > 05 03 21  0.023582430982633
> > > 05 03 22  0.000293765928922767
> > > 05 03 27  0.0440288222469235
> > > 05 03 28  0.106263428254761
> > > 05 03 29  0.291212461872628
> > > 05 03 30  0.198305017329253
> > > 05 03 31  0.186935599530143
> > > 05 04 01  0.316471519561273
> > > 05 04 02  0.266260602009615
> > > 05 04 03  0.0456391152384458
> > > 05 04 04  0.113939833419049
> > > 05 04 05  0.140500137811164
> > > 05 04 06  0.374670064516577
> > > 05 04 07  0.295820206701906
> > > 05 04 08  0.0833493810907385
> > > 05 04 10  0.0253248646840757
> > > 05 04 11  0.188773903020133
> > > 05 04 12  0.206619775067284
> > > 05 04 13  0.408503282817833
> > > 05 04 14  0.344129922512134
> > > 05 04 15  0.283273728250647
> > > 05 04 16  0.155780334719261
> > > 05 04 17  0.0815692243668445
> > > B is extracted from A and I wish to plot A and B on the same x-axis
> > > but different y axis on the same graph. Stacking very close helps to
> > > illustrates the common rapid variations in A, represented in B.
> > >
> > > One of the codes I tried without success is:
> > > data <- read.table("A", col.names = c("year", "month", "day",
> > > "counts"))
> > >
> > > new.century <- data$year < 50
> > >
> > > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> > >
> > > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > > x1 = data$date
> > > y1=data$counts
> > > #y1=scale(data$counts)
> > >
> > >
> > > data <- read.table("B", col.names = c("year", "month", "day",
> > > "counts"))
> > >
> > > new.century <- data$year < 50
> > >
> > > data$year <- ifelse(new.century, data$year + 2000, data$year + 1900)
> > >
> > > data$date <- as.Date(ISOdate(data$year, data$month, data$day))
> > > x2 = data$date
> > > y2=data$counts
> > >
> > >
> > > pdf("PLOT.pdf")
> > >
> > >   par(mar=c(5,5,5,5))
> > >
> > > plot(x1,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-5.470919,1.2983
> > > 29),ylab="")
> > > axis(side=2, at=c(-6,0,2))
> > > mtext("red line", side = 2, line=2.5, at=0)
> > >
> > > par(new=TRUE)
> > > plot(x2,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(-4.808186,0.0),
> > > ylab="") axis(side=4, at=c(-5,-1,0), labels=c("98%","100%","102%"))
> > > mtext("blue line", side=4, line=2.5, at=100)
> > > dev.off()
> > >
> > > Your assistance is ever appreciated.
> > > Best wishes
> > > Ogbos
> > >
> > > ______________________________________________
> > > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> > > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.