Как настроить таблицу со значениями TRUE / FALSE или 1/0? - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в R, и моя цель - создать линейный график на основе значений в таблице. Вот формат моей таблицы:

             0    1
  2017-02    1    2
  2017-03    0    2
  2017-04    0    2
  2017-10    0    2

Первый столбец - это дата, второй столбец представляет ЛОЖНЫЕ значения, а третий столбец представляет ИСТИННЫЕ значения. После создания этой таблицы я попытался построить значения в таблице как есть, но на графике были показаны оба столбца с метками «0» и «1», тогда как на самом деле я хочу построить график только для столбца с меткой «1». Чтобы обойти это, я обновил таблицу, исключив столбец с меткой «0». Вот что у меня есть:

tbl<-with(COMP43,table(COMP43$Date,COMP43$Retention))
tbl<-tbl[,2]
plot(tbl,type="l",main="Approved Retentions",lwd=3,xlab="Date")

С помощью этого кода я успешно построил график, за исключением того, что теперь мои значения оси x не показывают даты, а скорее 0, 5, 10, 15. Есть ли там более простой способ построить это? Или способ показать даты на оси x?

В конечном итоге мне нужен более продвинутый график с интерактивностью, использующий htmlwidgets. Я не знаю, повлияет ли это на какое-либо решение для построения графиков, с которым я начинаю.

Большое спасибо!

Вот что я показываю для Dput (tbl):

dput(tbl)
c(`2017-02` = 2L, `2017-03` = 2L, `2017-04` = 2L, `2017-10` = 2L, 
`2017-11` = 1L, `2018-01` = 3L, `2018-02` = 0L, `2018-03` = 3L, 
`2018-04` = 9L, `2018-05` = 2L, `2018-06` = 166L, `2018-07` = 18L, 
`2018-08` = 8L, `2018-09` = 7L, `2018-10` = 51L, `2018-11` = 11L, 
`2018-12` = 8L, `2019-01` = 7L, `2019-02` = 38L, `2019-03` = 9L, 
`2019-04` = 34L, `2019-05` = 33L, `2019-06` = 39L, `2019-07` = 41L, 
`2019-08` = 40L, `2019-09` = 37L, `2019-10` = 154L, `2019-11` = 38L, 
`2019-12` = 30L, `2020-01` = 26L, `2020-02` = 59L, `2020-03` = 23L, 
`2020-04` = 14L)

1 Ответ

0 голосов
/ 05 мая 2020

Во-первых: вам не нужно удалять ненужные столбцы из вашего data.frame или матрицы, чтобы выборочно построить определенный столбец: просто укажите plot, какой столбец вы хотите построить:

plot(my_matrix[,2])

Во-вторых: рисовать метки так, как нужно, в R не всегда очень просто (к сожалению). Часто это нужно сделать в два этапа - сначала построить график без оси, а затем построить ось. Это становится еще более неудобным, если вы хотите пометить галочки длинными текстовыми метками, как здесь. Но хорошая новость состоит в том, что все это можно обернуть в чистую функцию.

Вот пример:

Сначала постройте график без оси x:

plot(tbl,type="o",xaxt="n",xlab="",ylab="TRUE values")
# I chose type="o" overlaid lines & points
# xaxt="n" specifies to not plot the x-axis

Затем мы создаем функцию для добавления текстовых меток оси x:

x_axis_labels=function(labels,every_nth=1,...) {
    axis(side=1,at=seq_along(labels),labels=F)
    text(x=(seq_along(labels))[seq_len(every_nth)==1],
        y=par("usr")[3]-0.075*(par("usr")[4]-par("usr")[3]),
        labels=labels[seq_len(every_nth)==1],xpd=TRUE,...)
}
# axis() draws the axis with ticks at positions specified by at.  Again, we don't plot the labels yet.
# text() plots the labels at positions given by x and y.
# We estimate the y-positions from the values of the y-axis (using par("usr")),
# and specify xpd=TRUE to indicate that we don't want to crop plotting to within the plot area
# Note that we select the [seq_len(every_nth)==1] elements of both the x positions and the labels, 
# so we can easily skip labels if there would be too many to cram in otherwise.  
# Finally, we leave a ... in the function so we can pass additional arguments to text()

Наконец, мы вызываем новую функцию для построения меток отметок оси:

x_axis_labels(labels=names(tbl),every_nth=4,adj=1,srt=45)

Здесь мы используем ... в функции для передачи еще двух параметров: adj=1 указывает выравнивание текстовых меток по правому краю, а srt=45 указывает их поворот на 45 градусов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...