我有以下数据:
mydata <- data.frame(x = c("UK1", "UK2", "UK3", "UK4", "UK5", "UK6", "UK7"),
n = c(50, 55, 58, 64, 14, 18, 45),
F = c(-6, 17, 26, -37, 44, -22, 15),
z = c("a", "a", "b", "a" , "b", "b", "a"))
我想创建列x(x轴)的ggplot(条形图),而不是按列z分割的列n(y轴)颜色。棘手的部分是,如果F中的值为正值,我希望条形图上升,如果为负值则向下。 ggplot可以吗?
答案 0 :(得分:2)
我的代表太低而无法发表评论或赞成,所以这里有一个基于前一个答案的答案:
ggplot(mydata) +
geom_bar(aes(x = x, y =(n*ifelse(F<0,-1,1)), fill = z), stat = "identity") +
scale_y_continuous(labels=abs)
这将在1 go中添加方向(不需要额外的列),并使用abs()
函数转换y轴的标签。
答案 1 :(得分:2)
使用sign
的解决方案:
您可以使用sign()
提取F
的符号并将其乘以n
:n * sign(F)
library(ggplot2)
mydata <- data.frame(x = c("UK1", "UK2", "UK3", "UK4", "UK5", "UK6", "UK7"),
n = c(50, 55, 58, 64, 14, 18, 45),
F = c(-6, 17, 26, -37, 44, -22, 15),
z = c("a", "a", "b", "a" , "b", "b", "a"))
ggplot(mydata, aes(x, n * sign(F), fill = z)) +
geom_bar(stat = "identity", position = "dodge")
答案 2 :(得分:1)
ggplot2中的条形图是使用geom_bar
制作的,但默认情况下使用stat_bin
,即它会为您计算二进制数中的出现次数。诀窍是告诉ggplot2按原样使用这些值。这是通过geom_bar(stat='identity')
完成的。
其次,要让一些上升,一些下降,你需要变量的值,好吧,正面和负面。我在下面的代码中提出了一种方法。
mydata$dir <- ifelse(mydata$F < 0, -1, 1)
ggplot(mydata, aes(x=x, y=n*dir, colour=z)) + geom_bar(stat='identity')