From f9f647c1316d01d70abf2e4d45a467d360060ed1 Mon Sep 17 00:00:00 2001
From: Deepankar Chakroborty <deepankar.chakroborty@utu.fi>
Date: Thu, 30 Jul 2020 12:52:41 +0300
Subject: [PATCH] Squashed commit of the following:

commit fedbca4a7aa8fb436702accdf1f9b5ec7f066d60
Author: Deepankar Chakroborty <deepankar.chakroborty@utu.fi>
Date:   Thu Jul 30 12:50:20 2020 +0300

    Updates

    1. Improve readability
    2. Manage differing lengths of breaks and labels.

commit fb32fb9173c66c8862adb0ad41d82db9d128777b
Author: Deepankar Chakroborty <deepankar.chakroborty@utu.fi>
Date:   Thu Jul 30 12:43:20 2020 +0300

    skip.steps works as expected

    skip.steps = 1, now skips 1 observation.

commit 00a8bbcf04731c010e0a5989a805274609560188
Author: Deepankar Chakroborty <deepankar.chakroborty@utu.fi>
Date:   Thu Jul 30 12:32:16 2020 +0300

    add script to calculate breaks for axes in ggplot2

    calculates breaks and labels for axes in ggplot2 with user defined gaps
---
 ggplotBreaks.R | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 ggplotBreaks.R

diff --git a/ggplotBreaks.R b/ggplotBreaks.R
new file mode 100644
index 0000000..bbac9fc
--- /dev/null
+++ b/ggplotBreaks.R
@@ -0,0 +1,64 @@
+# #<---------------------------->
+# # Please include this section when distributing and/or using this code. 
+# # Please read and abide by the terms of the included LICENSE
+# #
+# #  Author : Deepankar Chakroborty (https://gitlab.utu.fi/deecha)
+# #  Report issues: https://gitlab.utu.fi/deecha/shared_scripts/-/issues
+# #  License: https://gitlab.utu.fi/deecha/shared_scripts/-/blob/master/LICENSE
+# #
+# #  PURPOSE:
+# #  Returns a list of vectors containing breaks and labels 
+# # for a continuous variable mapped to one of the axes for use with ggplot2
+# #  User enters: 
+# #     - the range of the data 
+# #     - the tick amount
+# #     - skip.steps (if any) = number of labels to skip 
+# #                             (i.e. show tick but no label)
+# #     e.g.
+# #         ggplotBreaks(c(0,150), tick =10, skip.steps = 1) # gives
+# #  $breaks
+# #     0  10  20  30  40  50  60  70  80  90 100 110 120 130 140 150
+# # 
+# #  $labels
+# #    "0"  " "  "20"  " "  "40"  " "  "60"  " "  "80"  " "  "100"  " "
+# #    "120"  " "  "140"  " "
+# #
+# #<---------------------------->
+
+ggplotBreaks <- function(range,tick,skip.steps=0){
+  if (length(range) != 2){
+    stop("Correct format for: range = c(min_value,max_value)")
+  }
+  if(skip.steps<0){
+    stop(" 'skip.steps' should be >= 0")
+  }
+  breaks <- seq(from = range[1],
+                to = range[2],
+                by = tick)
+  if(skip.steps==0){
+    labels <- as.character(breaks)  
+  } else {
+    tmp <- c()
+    labels <- unlist(
+      lapply(
+        breaks[seq(from = 1,
+                   to = length(breaks),
+                   by = skip.steps+1)],
+        function(x) c(tmp,
+                      c(x,
+                        rep(" ",skip.steps)))),
+                     use.names = F)
+    rm(tmp)
+    
+  }
+  if(length(labels) < length(breaks)){
+    ## Add more spaces at the end to make lengths match
+    labels <- c( labels, rep(" " , (length(breaks) - length(labels))))
+  }
+  if ( length(breaks) < length(labels)){
+    ## Remove spaces from the end to make the lengths match
+    labels <- labels[1:length(breaks)]
+  }
+  return(list( breaks = breaks,
+              labels = labels))
+}
-- 
GitLab