除了xlab
之外,我想在3到3个条形图中添加刻度线。我为单个图表尝试了this解决方案,但不知怎的,我无法复制它。我们的想法是用d来标记每个条形,从-3到+3,单位增加。每个图中的第一个条形代表-3的值。我尝试使用下面的模拟数据来演示我的问题。有任何想法吗?
# Data generation
# Populating a matrix
matrix(rnorm(63, 1:9), nrow=7, byrow=TRUE)
# Labelling the matrix
colnames(mat.s) <- c("Hs", "Sex", "Es", "Bo", "R", "W", "S", "Pri", "Abo")
# Tick mark indicator
d <- seq(-3,3,1)
# Plotting estimates
par(mfrow=c(3,3), mar = c(4,3,3,1))
for(i in 1:9) {
# Bar plot
barplot(mat.s[,i],
# X-label
xlab = colnames(mat.s)[i])
}
答案 0 :(得分:4)
在循环中的axis.lty
函数中指定names.arg
,mgp
和barplot
,您就可以了:
#I haven't changed anything else before the for-loop
#only changes have taken place inside the barplot function below
for(i in 1:9) {
# Bar plot
barplot(mat.s[,i], xlab = colnames(mat.s)[i],
names.arg= as.character(-3:3), axis.lty=1, mgp=c(3,1,0.2))
}
输出:
更详细一点:
names.arg
将添加标签axis.lty=1
将添加x轴mgp
是一个长度为3的向量,它按此顺序控制标题,标签和轴线的边距。我只需要将其中的第三个元素更改为0.2,以便轴看起来很好(检查?par
)。答案 1 :(得分:3)
LyzandeR的一个很好的答案是在为对象分配axis()
之后添加barplot()
:
for(i in 1:9) {
# Bar plot
temp <- barplot(mat.s[,i],
# X-label
xlab = colnames(mat.s)[i])
axis(1,at=temp,labels=-3:3)
}
答案 2 :(得分:2)
这是ggplot
版本:
library(dplyr)
library(reshape2)
library(ggplot2)
# Add x-labels and reshape to long format then plot
ggplot(mat.s %>% mutate(x=-3:3) %>% melt(id.var="x"),
aes(x=x, y=value)) +
geom_bar(stat="identity", fill=hcl(195,100,65)) +
facet_wrap(~variable) +
labs(x="", y="") +
scale_x_continuous(breaks=-3:3)