我的数据框:
N P E S
W1 3.5 3.5 3.4 3.5
w2 3.4 3.7 3.6 3.5
w3 3.5 3.4 3.5 3.5
w4 3.5 3.4 3.5 3.5
w5 3.5 3.4 3.5 3.5
w6 3.5 3.4 3.5 3.5
w7 3.5 3.4 3.5 3.5
w8 3.5 3.4 3.5 3.5
和barplot的代码
mat <- as.matrix(t(tabela.matrix))
qw <- barplot(mat, beside = TRUE, axisnames = FALSE, ylim = c(0, 6),
col = c("yellow", "deepskyblue1", "yellowgreen", "orchid4"))
text(colMeans(qw[2:3, ]), -0.25, labels = colnames(mat), xpd = TRUE, srt = 15)
text(qw, 0, round(as.matrix(t(tabela.matrix)), 1), cex = 1, pos = 3, srt = 90)
legend(3.2, -0.6, c("N","P","E", "S"),
fill = c("yellow", "deepskyblue1", "yellowgreen", "orchid4"),
horiz = TRUE, xpd = TRUE)
所以在我的条形图上我需要添加line
来表示减法:每行的最大最小值。所以我使用下面的代码来获得减法。
max.tmp <- apply(df, 1, max)
min.tmp <- apply(df, 1, min)
substr.tmp <- max.tmp - min.tmp
现在我想在substr.tmp
中添加红线指示值。代码lines()
不起作用。
我的输出(红线)应该“看起来”像这样(它是图片形式excel,我有兴趣添加行,而不是图片本身的数据)
dput
数据:
structure(c(3.46666666666667, 3.35, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.45555555555556, 3.7, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.40769230769231, 3.57692307692308, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.51122994652406, 3.5156862745098, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909 ), .Dim = c(8L, 4L), .Dimnames = list(c("a", "b", "c", "d", "e", "f", "g", "h"), NULL))
答案 0 :(得分:4)
使用data.table
和ggplot2
个包,您可以按照以下方式执行此操作:
library(data.table)
df2 <- melt(setDT(df), id="name")
df2[, difference := max(value) - min(value), by = name]
library(ggplot2)
ggplot(df2, aes(x=name, y=value, fill=variable)) +
geom_bar(stat="identity", position="dodge") +
geom_line(aes(x=name, y=difference, group=1), size=1.5, color="red") +
scale_x_discrete(expand = c(0,0)) +
scale_y_continuous(expand = c(0,0), limits = c(0,4)) +
scale_fill_manual(breaks = c("V1", "V2", "V3", "V4"),
values = c("yellow", "deepskyblue1", "yellowgreen", "orchid4")) +
theme_bw()
这给出了:
使用过的数据:
m <- structure(c(3.46666666666667, 3.35, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.45555555555556, 3.7, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.36666666666667, 3.40769230769231, 3.57692307692308, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.53846153846154, 3.51122994652406, 3.5156862745098, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909, 3.49090909090909 ), .Dim = c(8L, 4L), .Dimnames = list(c("a", "b", "c", "d", "e", "f", "g", "h"), NULL))
df <- as.data.frame(m)
df$name <- rownames(df)
答案 1 :(得分:2)
这可能对您有用,但您的示例数据集(以及评论中的一个)的差异将产生一个有趣的情节:
#original code
mat <- as.matrix(t(tabela.matrix)) ;qw <- barplot(mat, beside=TRUE, axisnames = FALSE,ylim = c(0, 6), col=c("yellow", "deepskyblue1", "yellowgreen","orchid4")) ; text(colMeans(qw[2:3,]), -0.25, labels = colnames(mat), xpd=TRUE, srt=15); legend(3.2,-0.6, c("Nadrejeni","Podrejeni","Enak nivo", "Samoocenjevalec"), fill=c("yellow", "deepskyblue1", "yellowgreen","orchid4"), horiz=TRUE, xpd=TRUE)
text(qw, 0, round(as.matrix(t(tabela.matrix)), 1),cex=1,pos=3,srt=90)
legend(3.2, -0.6, c("N","P","E", "S"),
fill = c("yellow", "deepskyblue1", "yellowgreen", "orchid4"),
horiz = TRUE, xpd = TRUE)
#new code
par(new=TRUE)
plot(substr.tmp, lwd=2, col="red", type="l", axes=FALSE, ylim=c(0,6))
axis(4, ylim=c(0,6), col="red",col.axis="red",las=1)
请注意,此图有两个轴,一个是黑色,一个是红色。红色的是第二个情节。如果您要删除它,请注释最后一行。并且,根据您的预期输出,这保持在原始比例(因此ylim=c(0,6)
)