我在R基座上绘制了一个堆积的条形图:
set.seed(12)
dat <- matrix(sample(1:6, 6) , nrow = 3)
rownames(dat) <- c("A", "B", "C")
colnames(dat) <- c("blue", "green")
barplot(dat, beside = TRUE)
我想
像这样:
我该如何实现?
我通过以下方式修改了@nya的答案:
set.seed(12)
dat <- matrix(sample(1:6, 6) , nrow = 3)
rownames(dat) <- c("A", "B", "C")
colnames(dat) <- c("blue", "green")
sequence <- seq(1, 6, 1) # min = 1, max = 6, steps = 1
resolution <- length(sequence)
blues <- colorRampPalette(c("black", "blue"))(resolution)
greens <- colorRampPalette(c("black", "green"))(resolution)
cols <- c(blues[match(dat[, "blue"], sequence)],
greens[match(dat[, "green"], sequence)])
mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(2, 0, -2, 0))
barplot(dat, beside = TRUE, col = cols)
答案 0 :(得分:1)
首先,我们需要创建用于绘制的颜色渐变。让我们使用从黑色到蓝色或绿色的10种颜色的分辨率。
res <- 10
blues <- colorRampPalette(c("black", "blue"))(res)
greens <- colorRampPalette(c("black", "green"))(res)
第二,我们将使用强制cut
的函数来确定值在渐变中的合适位置。我们将使用因子(子集行时在R
中解释为数字)进行选择,哪些颜色对应于数据中的哪些值。
b.cut <- as.factor(cut(dat[, "blue"], breaks = res))
g.cut <- as.factor(cut(dat[, "green"], breaks = res))
cols <- c(blues[b.cut], greens[g.cut])
cols
这些颜色可用于绘图。请注意,我更改了输入数据的名称,因为data
是一个函数,一种好的编程习惯是避免用变量覆盖函数。
barplot(dat, beside = TRUE, col = cols)
答案 1 :(得分:0)
您可以通过添加颜色参数col
来修改最后一行,以在代码中包括颜色选项。我通过添加如下所示颜色的适当六边形代码来修改了最后一行:
barplot(data, beside = TRUE,col=c("#0000FF","#0066FF","#00FFFF","#ADFF2F","#008000","#006400"))
这是我得到的情节。
修改后的代码发布在下面。根据您的需要更改六角形颜色代码。我引用了datamentor网站的Color Cycling in R
部分。
set.seed(12)
data = matrix(sample(1:6, 6) , nrow = 3)
rownames(data) = c("A", "B", "C")
colnames(data) = c("blue", "green")
barplot(data, beside = TRUE,col=c("#0000FF","#0066FF","#00FFFF","#ADFF2F","#008000","#006400"))