在条形图中填充条纹与纺织品而不是R中的颜色

War*_*ior 11 plot r bar-chart

我试图用不同的纺织品而不是颜色填充条形图中的条形图.

我知道如何用不同的线条填充条形,如下所示:

aaa <- c(1,2,3,4)
barplot(aaa, density = c(4,4,4,4), angle = c(45, 90, 180, -45))
Run Code Online (Sandbox Code Playgroud)

这会给我这样的事情:

                       ___
4|                    |\\\|
 |              ___   |\\\|
3|             |___|  |\\\|
 |             |___|  |\\\|
2|       ___   |___|  |\\\|
 |      |||||  |___|  |\\\|
1|___   |||||  |___|  |\\\|
 |///|  |||||  |___|  |\\\|
0|///|__|||||__|___|__|\\\|_
   1      2      3      4
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用其他类型的填充(例如*,正方形,彩色圆点,三角形等形状).或者,如果这实际上可以完成.

目前,我正在使用igraph库,我不太确定是否有任何其他包可以允许我使用其他类型的填充.

有什么建议?

TWL*_*TWL 6

plotrix包提供rectFillbarp功能,允许用自定义形状填充条.

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("*","$","~","@")))
Run Code Online (Sandbox Code Playgroud)

不幸的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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


编辑:似乎最新版本的软件包可能有一个错误,因为一些用户在重现这些情节时遇到了麻烦.如果发生这种情况,请尝试plotrix使用以下代码安装早期版本:

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


the*_*ail 5

我确信可以调整类似下面的内容:

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)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述