Hi Steven,
I caved in and installed plotly. Not an easy task. When I tried your
example, I got a blank HTML page displayed. I then created a plot with
your data above showing every third monthday label. If this is what
you want, maybe the way I have coded it will work in plotly.

sydf$date<-as.Date(paste(sydf$year,sydf$monthday),"%Y %m-%d")
plot(sydf$date,sydf$rate,type="l",xaxt="n")
every3rd<-seq(1,length(sydf$date),3)
axis(1,at=sydf$date[every3rd],labels=sydf$monthday[every3rd])

Jim

On Wed, Jul 17, 2019 at 4:58 AM <nst...@gmail.com> wrote:
>
> Sorry, this still doesn't work.
>
> When I use that expression in "ticktext" parameter, it shows those every 3rd 
> label in the beginning, and after they finished, it shows some remaining 
> values from "year" column.
> When I tried with my real data, it was showing the original x axis values as 
> lables, it seems like it ignored the "ticktext" parameter.
> This is my short example:
> sydf<-read.table(text="year monthday rate
>  1993 05-01 0.608
>  1994 06-01 0.622
>  1996 07-01 0.623
>  1998 08-01 0.647
>  2000 09-01 0.646
>  2002 10-01 0.625
>  2004 11-01 0.628
>  2006 12-01 0.685
>  2008 01-01 0.679
>  2010 02-01 0.595
>  2012 03-01 0.567
>  2014 04-01 0.599
>  2016 05-01 0.642
>  2018 06-01 0.685",
>                  header=TRUE,
>                  stringsAsFactors=FALSE)
>
> library(plotly)
> plot_ly(sydf,
>         x = ~year,
>         y = ~rate,
>         type = 'scatter', mode = 'lines') %>%
>   layout(
>     xaxis = list(
>       ticktext = sydf$monthday[seq(1, length(sydf$monthday), 3)],
>       tickvals = sydf$year,
>       tickmode = "array",
>       tickangle = 270
>     ))
>
> Any ideas?
>
> Thanks,
> Steven
>
> -----Original Message-----
> From: nst...@gmail.com <nst...@gmail.com>
> Sent: Tuesday, July 16, 2019 9:55 AM
> To: 'Jim Lemon' <drjimle...@gmail.com>
> Cc: 'r-help mailing list' <r-help@r-project.org>
> Subject: RE: [R] Plotting in R
>
> OK, I think I got this:
>
> For example every 3rd element would be:
> sydf$monthday[seq(1, length(sydf$monthday), 3)]
>
> Thanks,
> Steven
>
> -----Original Message-----
> From: nst...@gmail.com <nst...@gmail.com>
> Sent: Tuesday, July 16, 2019 9:39 AM
> To: 'Jim Lemon' <drjimle...@gmail.com>
> Cc: 'r-help mailing list' <r-help@r-project.org>
> Subject: RE: [R] Plotting in R
>
> Thanks Jim,
>
> Yes, I only want to show the month and day as labels, because on my chart I 
> am actually showing 2 line charts, one from the previous year, and one from 
> this year, to compare them, and the month and day are matching for them, but 
> the year would be different, so it makes sense to show only month and day on 
> the x axis.
> So it looks like I got the solution already for that part, the new challenge 
> is that there were too many labels and overlapping on each other.
> What is the best way to evenly sample values from a long list of string 
> values?
> So let's say my data was this overly simplified:
> sydf<-read.table(text="year monthday rate
>  1993 05-01 0.608
>  1994 06-01 0.622
>  1996 07-01 0.623
>  1998 08-01 0.647
>  2000 09-01 0.646
>  2002 10-01 0.625
>  2004 11-01 0.628
>  2006 12-01 0.685
>  2008 01-01 0.679
>  2010 02-01 0.595
>  2012 03-01 0.567
>  2014 04-01 0.599
>  2016 05-01 0.642
>  2018 06-01 0.685",
>                  header=TRUE,
>                  stringsAsFactors=FALSE)
>
> Then my x axis would be based on the values of sydf$monthday - In my case 
> there are lots of values. How can I subset this to have only every n-th 
> value? I guess this must be some common operation in R.
> So if I have 200 values, and I only want to show 20 of them as labels, I 
> would calculate n = 200/20 = 10 and I want to get every 10th value in the 
> list sydf$monthday. But the list has strings, so I cannot use "by =".
>
> Thank you,
> Steven
>
> -----Original Message-----
> From: Jim Lemon <drjimle...@gmail.com>
> Sent: Friday, July 12, 2019 6:41 PM
> To: nst...@gmail.com
> Cc: r-help mailing list <r-help@r-project.org>
> Subject: Re: [R] Plotting in R
>
> Oh, sorry, I think I see what you have tried to do. You want yearly ticks but 
> month-day labels. These won't mean much unless you also have the year. If you 
> ask for a date with just the year, as.Date will give you a date in the middle 
> of that year:
>
> as.Date("2002","%Y")
> [1] "2002-07-13"
>
> So making the labels these mid-year dates as character strings might do what 
> you want:
>
> yrlabels<-as.character(yrticks)
>
> Jim
>
> On Sat, Jul 13, 2019 at 8:33 AM Jim Lemon <drjimle...@gmail.com> wrote:
> >
> > Hi Steven,
> > year1 is a number (e.g. 1993), monthday (e.g. 05-01) is not.
> >
> > Jim
> >
> > On Fri, Jul 12, 2019 at 10:56 PM <nst...@gmail.com> wrote:
> > >
> > > Thanks Jim.
> > >
> > > I am trying to apply this to my version with plot_ly, and couldn't make 
> > > it to work.
> > > The sydf$year1 field is numeric, so the min() and max() works, but when I 
> > > tried to use your formula for the sydf$monthday field I get an error:
> > > yrticks <- 
> > > as.Date(as.character(seq(min(sydf$monthday),max(sydf$monthday),by=2)),
> > >                   "%Y")
> > >
> > > Error in seq.default(min(sydf$monthday), max(sydf$monthday), by = 2) :
> > >   'from' must be a finite number
> > > In addition: Warning message:
> > > In seq.default(min(sydf$monthday), max(sydf$monthday), by = 2) :
> > >   NAs introduced by coercion
> > >
> > > So I thought maybe you need to sample the tickvals not the ticktext and 
> > > it would show the corresponding tick labels in the right palaces. Then I 
> > > tried the way you had like this:
> > > sydf<-read.table(text="year1 monthday rate
> > >  1993 05-01 0.608
> > >  1994 06-01 0.622
> > >  1996 07-01 0.623
> > >  1998 08-01 0.647
> > >  2000 09-01 0.646
> > >  2002 10-01 0.625
> > >  2004 11-01 0.628
> > >  2006 12-01 0.685
> > >  2008 01-01 0.679
> > >  2010 02-01 0.595
> > >  2012 03-01 0.567
> > >  2014 04-01 0.599
> > >  2016 05-01 0.642
> > >  2018 06-01 0.685",
> > >                  header=TRUE,
> > >                  stringsAsFactors=FALSE)
> > >
> > > yrticks <- 
> > > as.Date(as.character(seq(min(sydf$year1),max(sydf$year1),by=2)),
> > >                   "%Y")
> > >
> > > library(plotly)
> > > plot_ly(sydf,
> > >         x = ~year1,
> > >         y = ~rate,
> > >         type = 'scatter', mode = 'lines') %>%
> > >   layout(
> > >     xaxis = list(
> > >       ticktext = sydf$monthday,
> > >       tickvals = sydf$yrticks,
> > >       tickmode = "array",
> > >       tickangle = 270
> > >     ))
> > >
> > > But the chart didn't show any tick labels.
> > > I guess I need to sample sydf$monthday, right? Because that's what I want 
> > > to show as tick labels. But the problem is that monthday is string, and 
> > > can't use a value for "by=", maybe I need to sample somehow by the index 
> > > position.
> > >
> > > Thanks,
> > > Steven
> > >
> > > -----Original Message-----
> > > From: Jim Lemon <drjimle...@gmail.com>
> > > Sent: Thursday, July 11, 2019 10:41 PM
> > > To: nst...@gmail.com
> > > Cc: r-help mailing list <r-help@r-project.org>
> > > Subject: Re: [R] Plotting in R
> > >
> > > Hi Steven,
> > > Neat solution. With a lot more values on the time axis, you will be 
> > > better off with something like:
> > >
> > > yrticks<-as.Date(as.character(seq(min(sydf$year1),max(sydf$year1),by
> > > =2)),
> > >  "%Y")
> > > axis(1,at=yrticks,labels=format(yrticks,"%Y"))
> > >
> > > You probably won't need staxlab for that.
> > >
> > > Jim
> > >
> > > On Fri, Jul 12, 2019 at 11:55 AM <nst...@gmail.com> wrote:
> > > >
> > > > Thanks Jim, that worked.
> > > >
> > > > > I expected that the axis labels would be crowded so I used the 
> > > > > plotrix library to stagger the x-axis labels. Hope this solves your 
> > > > > problem.
> > > > I liked how that showed, not overlapping on each other. I wasn't aware 
> > > > of the plotrix library.
> > > >
> > > > In my code I was using plot_ly for visualization, because it looked 
> > > > nicer compared to the simple plot() function, and I have the chart in a 
> > > > Shiny dashboard (RMD file).
> > > > I found in the meantime today some code example for plot_ly and using 
> > > > the same data it looks like this:
> > > > sydf<-read.table(text="year1 monthday rate
> > > >  1993 05-01 0.608
> > > >  1994 06-01 0.622
> > > >  1996 07-01 0.623
> > > >  1998 08-01 0.647
> > > >  2000 09-01 0.646
> > > >  2002 10-01 0.625
> > > >  2004 11-01 0.628
> > > >  2006 12-01 0.685
> > > >  2008 01-01 0.679
> > > >  2010 02-01 0.595
> > > >  2012 03-01 0.567
> > > >  2014 04-01 0.599
> > > >  2016 05-01 0.642
> > > >  2018 06-01 0.685",
> > > >                  header=TRUE,
> > > >                  stringsAsFactors=FALSE)
> > > >
> > > > library(plotly)
> > > > plot_ly(sydf,
> > > >         x = ~year1,
> > > >         y = ~rate,
> > > >         type = 'scatter', mode = 'lines') %>%
> > > >   layout(
> > > >     xaxis = list(
> > > >       ticktext = sydf$monthday,
> > > >       tickvals = sydf$year1,
> > > >       tickmode = "array",
> > > >       tickangle = 270
> > > >     ))
> > > >
> > > > This is where I found about the parameters:
> > > > https://plot.ly/r/tick-formatting/
> > > >
> > > > Now my other challenge is that with my data I have a lot more values on 
> > > > the x axis, and they overlap even when turned vertically. I guess there 
> > > > must be a way of taking a number of values evenly from the list of x 
> > > > axis lables, and use that for the "ticktext" parameter.
> > > > I thought it must be some variation of the seq(from, to, by= ). Can I 
> > > > use that with a list of strings?
> > > >
> > > > Thanks,
> > > > Steven
> > > >
> > > > -----Original Message-----
> > > > From: Jim Lemon <drjimle...@gmail.com>
> > > > Sent: Thursday, July 11, 2019 7:46 PM
> > > > To: nst...@gmail.com; r-help mailing list <r-help@r-project.org>
> > > > Subject: Re: [R] Plotting in R
> > > >
> > > > Hi Steven,
> > > > It is pretty easy, but there are one or two things to watch for.
> > > > First, don't use a hyphen in a field name unless you enclose it in
> > > > single quotes when extracting it. I've just removed the hyphen in
> > > > this
> > > > example:
> > > >
> > > > sydf<-read.table(text="year1 monthday rate
> > > >  1993 05-01 0.608
> > > >  1994 06-01 0.622
> > > >  1996 07-01 0.623
> > > >  1998 08-01 0.647
> > > >  2000 09-01 0.646
> > > >  2002 10-01 0.625
> > > >  2004 11-01 0.628
> > > >  2006 12-01 0.685
> > > >  2008 01-01 0.679
> > > >  2010 02-01 0.595
> > > >  2012 03-01 0.567
> > > >  2014 04-01 0.599
> > > >  2016 05-01 0.642
> > > >  2018 06-01 0.685",
> > > >  header=TRUE,
> > > >  stringsAsFactors=FALSE)
> > > > sydf$date<-as.Date(paste(sydf$year1,sydf$monthday),"%Y %m-%d")
> > > > library(plotrix)
> > > > par(mar=c(6,4,4,2))
> > > > plot(sydf$date,sydf$rate,type="b",xaxt="n")
> > > > staxlab(1,at=sydf$date,labels=sydf$monthday)
> > > >
> > > > Note that I have also added the stringsAsFactors argument to prevent 
> > > > monthdate being read as a factor. I expected that the axis labels would 
> > > > be crowded so I used the plotrix library to stagger the x-axis labels. 
> > > > Hope this solves your problem.
> > > >
> > > > Jim
> > > >
> > > > On Fri, Jul 12, 2019 at 1:59 AM <nst...@gmail.com> wrote:
> > > > >
> > > > > Hi Jim,
> > > > >
> > > > > Thanks for your email.
> > > > > My question was: how to change the x axis labels without changing the 
> > > > > chart.
> > > > > Or is that not possible?
> > > > > Using your example, I added another column:
> > > > > sydf<-read.table(text="year1 month-day rate
> > > > >  1993 05-01 0.608
> > > > >  1994 06-01 0.622
> > > > >  1996 07-01 0.623
> > > > >  1998 08-01 0.647
> > > > >  2000 09-01 0.646
> > > > >  2002 10-01 0.625
> > > > >  2004 11-01 0.628
> > > > >  2006 12-01 0.685
> > > > >  2008 01-01 0.679
> > > > >  2010 02-01 0.595
> > > > >  2012 03-01 0.567
> > > > >  2014 04-01 0.599
> > > > >  2016 05-01 0.642
> > > > >  2018 06-01 0.685",
> > > > >                  header=TRUE)
> > > > >
> > > > > How can I show the column "month-day" as labels on the x axis,
> > > > > but still have the plot showing the chart as rate based on year?
> > > > > I tried this:
> > > > > plot(sydf$year,sydf$rate,type="b",
> > > > >      xlab="month-day",ylab="Rate")
> > > > >
> > > > > but this only changes the title of the x axis to "month-day". I
> > > > > want the values on the x axis to show 05-01  06-01, etc.
> > > > > Is that possible?
> > > > >
> > > > > Thanks,
> > > > > Steven
> > > > >
> > > > > -----Original Message-----
> > > > > From: R-help <r-help-boun...@r-project.org> On Behalf Of Jim
> > > > > Lemon
> > > > > Sent: Sunday, July 7, 2019 2:59 AM
> > > > > To: Steven Yen <st...@ntu.edu.tw>; r-help mailing list
> > > > > <r-help@r-project.org>
> > > > > Subject: Re: [R] Plotting in R
> > > > >
> > > > > Hi Steven,
> > > > > A basic plot can be displayed like this:
> > > > >
> > > > > sydf<-read.table(text="year rate
> > > > >  1993 0.608
> > > > >  1994 0.622
> > > > >  1996 0.623
> > > > >  1998 0.647
> > > > >  2000 0.646
> > > > >  2002 0.625
> > > > >  2004 0.628
> > > > >  2006 0.685
> > > > >  2008 0.679
> > > > >  2010 0.595
> > > > >  2012 0.567
> > > > >  2014 0.599
> > > > >  2016 0.642
> > > > >  2018 0.685",
> > > > > header=TRUE)
> > > > > plot(sydf$year,sydf$rate,type="b",
> > > > > xlab="Year",ylab="Rate")
> > > > >
> > > > > When you add more years and rates to the data frame, the axes
> > > > > will change to include the years and rates outside the ones in
> > > > > your example. As some have noted, this is a very basic question.
> > > > >
> > > > > Jim
> > > > >
> > > > > On Sat, Jul 6, 2019 at 11:33 PM Steven Yen <st...@ntu.edu.tw> wrote:
> > > > > >
> > > > > > I have a data frame containing two variables: year and rate (shown 
> > > > > > below).
> > > > > > Which function can I use to plot rate (y-axis) against year 
> > > > > > (x-axis)?
> > > > > > There will be more columns of rate later on.
> > > > > > Thank you.
> > > > > >
> > > > > > year rate 1 1993 0.608 2 1994 0.622 3 1996 0.623 4 1998 0.647
> > > > > > 5
> > > > > > 2000
> > > > > > 0.646 6 2002 0.625 7 2004 0.628 8 2006 0.685 9 2008 0.679 10
> > > > > > 2010
> > > > > > 0.595
> > > > > > 11 2012 0.567 12 2014 0.599 13 2016 0.642 14 2018 0.685
> > > > > >
> > > > > >
> > > > > > --
> > > > > > st...@ntu.edu.tw (S.T. Yen)
> > > > > >
> > > > > >
> > > > > >
> > > > > > ---
> > > > > > This email has been checked for viruses by Avast antivirus software.
> > > > > > https://www.avast.com/antivirus
> > > > > >
> > > > > >         [[alternative HTML version deleted]]
> > > > > >
> > > > > > ______________________________________________
> > > > > > R-help@r-project.org 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.
> > > > >
> > > > > ______________________________________________
> > > > > R-help@r-project.org 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.
> > > > >
> > > >
> > >
>
>
>

______________________________________________
R-help@r-project.org 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 via email to