为值指定颜色,并在R中绘制水平条

为值指定颜色,并在R中绘制水平条,r,colors,range,bar-chart,R,Colors,Range,Bar Chart,对于3列数据框,我想将颜色“红色”指定给19.293以下的值,“蓝色”指定给19.293以上的值 dataframe123 <- data.frame(hmin1, hmin2, hmin3) hmin2: c(17.7688888888889, 17.9866666666667, 18.2044444444444, 18.4222222222222, 18.64, 18.8577777777778, 19.0755555555556, 19.2933333333333, 19.51

对于3列数据框,我想将颜色“红色”指定给19.293以下的值,“蓝色”指定给19.293以上的值

dataframe123 <- data.frame(hmin1, hmin2, hmin3)
hmin2:

c(17.7688888888889, 17.9866666666667, 18.2044444444444, 18.4222222222222, 
18.64, 18.8577777777778, 19.0755555555556, 19.2933333333333, 
19.5111111111111, 19.7288888888889, 19.9466666666667, 20.1644444444444, 
20.3822222222222, 20.6, 20.8177777777778, NA, NA, NA, NA, NA, 
NA)
hmin3:

c(9.29333333333333, 10.2933333333333, 11.2933333333333, 12.2933333333333, 
13.2933333333333, 14.2933333333333, 15.2933333333333, 16.2933333333333, 
17.2933333333333, 18.2933333333333, 19.2933333333333, 20.2933333333333, 
21.2933333333333, 22.2933333333333, 23.2933333333333, 24.2933333333333, 
25.2933333333333, 26.2933333333333, 27.2933333333333, 28.2933333333333, 
29.2933333333333)
在指定“红色”和“蓝色”后,我打算将它们水平绘制为3条条形图,其中条形图呈现hmin1、hmin2和hmin3值的范围

到目前为止,我一直在使用
barplot()
,它使用以下代码输出叠加值,而不是范围

dataframe123 <- as.matrix(dataframe123)
barplot(dataframe123, horiz = TRUE)

dataframe123您可以使用
range
功能获取所需的范围

FullRange = range(dataframe123, na.rm=TRUE)
FullRange
[1]  3.94000 29.29333
BoxRanges = lapply(dataframe123, range, na.rm=TRUE)
BoxRanges
$hmin1
[1]  3.94 26.97
$hmin2
[1] 17.76889 20.81778
$hmin3
[1]  9.293333 29.293333
一旦你有了它,你可以通过制作一个空的绘图,然后绘制一些矩形来得到你正在寻找的条形图

plot(NULL, xlim=FullRange, ylim=c(0,3),  yaxt="n", xlab="Value", ylab="")
abline(v=19.293)
axis(2, at=(0:2)+0.4, labels=c("hmin1", "hmin2","hmin3"), 
    lty=0, las=2)

for(i in 1:3) {
    polygon(c(BoxRanges[[i]][1], BoxRanges[[i]][1], 19.293, 19.293), 
        c(i-1,i-0.2,i-0.2,i-1), col="red")
    polygon(c(19.293, 19.293, BoxRanges[[i]][2], BoxRanges[[i]][2]), 
        c(i-1,i-0.2,i-0.2,i-1), col="blue")
}

您可以使用
range
功能获得所需的范围

FullRange = range(dataframe123, na.rm=TRUE)
FullRange
[1]  3.94000 29.29333
BoxRanges = lapply(dataframe123, range, na.rm=TRUE)
BoxRanges
$hmin1
[1]  3.94 26.97
$hmin2
[1] 17.76889 20.81778
$hmin3
[1]  9.293333 29.293333
一旦你有了它,你可以通过制作一个空的绘图,然后绘制一些矩形来得到你正在寻找的条形图

plot(NULL, xlim=FullRange, ylim=c(0,3),  yaxt="n", xlab="Value", ylab="")
abline(v=19.293)
axis(2, at=(0:2)+0.4, labels=c("hmin1", "hmin2","hmin3"), 
    lty=0, las=2)

for(i in 1:3) {
    polygon(c(BoxRanges[[i]][1], BoxRanges[[i]][1], 19.293, 19.293), 
        c(i-1,i-0.2,i-0.2,i-1), col="red")
    polygon(c(19.293, 19.293, BoxRanges[[i]][2], BoxRanges[[i]][2]), 
        c(i-1,i-0.2,i-0.2,i-1), col="blue")
}

您能发布所需的图表吗?如果不能在R中渲染,可能需要使用图像软件?可以发布所需的图形吗?如果不能在R中渲染,可能需要使用图像软件?作为扩展,如何为该绘图添加图例?红色表示参数负变化,蓝色表示参数正变化?您可以使用he
legend
功能。但在目前的图表中,可能没有足够的空间。您可能需要将
xlim
参数更改为
plot
,以便有更多的空间。好的,谢谢。我还可以问一下,如何切换hmin2的颜色编码?蓝色应该在左边,红色应该在右边。作为一个扩展,我如何为这个绘图添加图例?红色表示参数负变化,蓝色表示参数正变化?您可以使用he
legend
功能。但在目前的图表中,可能没有足够的空间。您可能需要将
xlim
参数更改为
plot
,以便有更多的空间。好的,谢谢。我还可以问一下,如何切换hmin2的颜色编码?蓝色应该在左边,红色应该在右边。