Набивка баров в барной плите с использованием текстиля, а не цвета в R

Я пытаюсь заполнить бары в бар-планке, используя разные ткани, а не цвет.

Я знаю, как заполнять бары различными шаблонами таких строк:

aaa <- c(1,2,3,4)
barplot(aaa, density = c(4,4,4,4), angle = c(45, 90, 180, -45))

Это даст мне что-то вроде этого:

                       ___
4|                    |\\\|
 |              ___   |\\\|
3|             |___|  |\\\|
 |             |___|  |\\\|
2|       ___   |___|  |\\\|
 |      |||||  |___|  |\\\|
1|___   |||||  |___|  |\\\|
 |///|  |||||  |___|  |\\\|
0|///|__|||||__|___|__|\\\|_
   1      2      3      4

Я не уверен, как это сделать с другими типами заливок (например, такие формы, как *, квадраты, цветные точки, треугольники и т.д.). Или, если это вообще можно сделать вообще.

На данный момент я использую библиотеку igraph и не слишком уверен, есть ли другие пакеты, которые могут позволить мне использовать другие типы заполнений.

Какие-либо предложения?

Ответ 1

plotrix обеспечивает функции rectFill и barp, которые позволяют заполнять бары пользовательскими формами.

barp производит барьеры и вызывает rectFill чтобы заполнить их символами. Символы могут быть указаны с использованием параметров pch умолчанию (эталонная диаграмма) или с помощью настраиваемой строки, см. Примеры ниже.

# install the package
install.packages('plotrix')

# examples with varying pch parameters
require(plotrix)
a <- 1:4
barp(t(a), pch=t(1:4))
barp(t(a), pch=t(c("*","$","~","@")))

К сожалению, barp не очень гибкий:

  1. Данные должны быть представлены в матричном формате для указания различных символов. Столбцы матрицы должны соответствовать последовательности параметров pch. Следовательно, потребность в t() в текущих примерах.

  2. Как только pch указан, график становится черно-белым. Функция rectFill позволяет управлять цветом символов через pch.col, но barp не разрешает эту опцию. Чтобы решить эту проблему, я добавил эллипсис (...) в исходный код barp чтобы иметь возможность передавать дополнительные аргументы функции rectFill. Модифицированный код (barp2) доступен здесь.

Пример использования измененного кода:

# load the barp2 function
require(devtools)
source_gist("https://gist.github.com/tleja/8592929")

# run the barp2 function
require(plotrix)
a <- 1:4
barp2(t(a), pch=t(1:4), pch.col=1:4)

enter image description here


EDIT: Похоже, что самая последняя версия пакета может иметь ошибку, так как некоторые пользователи не могут воспроизвести графики. Если это произойдет, попробуйте установить более раннюю версию plotrix используя следующий код:

require(devtools)
install_url("http://cran.r-project.org/src/contrib/Archive/plotrix/plotrix_3.5-2.tar.gz") 

Ответ 2

Я уверен, что что-то вроде ниже можно адаптировать:

aaa <- c(1,2,3,4)
bp <- barplot(aaa,col="white")

fillbars <- function(height,bp,bg,size,spacing) {
  coords <- data.frame(bp-0.5,bp+0.5,0,height)
  invisible(
    apply(
      coords,
      1,
      function(d) {
        do.call(clip,unname(as.list(d)))
        x <- seq(d[1],d[2],by=spacing)
        y <- seq(d[3],d[4],by=spacing)
        xy <- expand.grid(x,y)
        symbols(
          xy,
          circles=rep(size,nrow(xy)),
          inches=FALSE,
          bg=bg,
          add=TRUE
        )
      }
    )
  )
}

fillbars(height=aaa,bp=bp,bg="red",size=0.06,spacing=0.3)

Результат:

enter image description here