Co *_*der 6 expression r bar-chart ggplot2
下面,我有R代码绘制分组条形图.
group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x')
mydata2 <- data.frame(mygroup = group_name,
mysubgroup = factor(c("Yes", "No"),
levels = c("Yes", "No")),
value = c(60,40,90,10,55,45,88,12))
ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) +
geom_bar(position = "dodge", width = 0.5, stat = "identity")+
coord_flip()
Run Code Online (Sandbox Code Playgroud)
目前,情节如下图所示.但是,我想在x轴上显示表达式,如下图所示.
我试过这个:
group_name = c(expression(A[1*x]),expression(A[1*x]),
expression(A[2*x]),expression(A[2*x]),
expression(A[3*x]),expression(A[3*x]),
expression(A[4*x]),expression(A[4*x]))
Run Code Online (Sandbox Code Playgroud)
但它给出了以下错误:
Error in as.data.frame.default(x[[i]], optional = TRUE) :
cannot coerce class ""expression"" to a data.frame
Run Code Online (Sandbox Code Playgroud)
怎么解决?
这是一个工作示例 - 我将其更改group_name为4个元素而不是8个,并手动将它们添加到ggplot表达式中.问题是表达式类型不能是a的列名data.frame.这逃脱了这个问题.
library(ggplot2)
group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x')
mydata2 <- data.frame(mygroup = group_name,
mysubgroup = factor(c("Yes", "No"),
levels = c("Yes", "No")),
value = c(60,40,90,10,55,45,88,12))
group_name = c(expression(A[1*x]),
expression(A[2*x]),
expression(A[3*x]),
expression(A[4*x]))
ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) +
geom_bar(position = "dodge", width = 0.5, stat = "identity")+
coord_flip() +
scale_x_discrete(labels=group_name) # Adding the labels here
Run Code Online (Sandbox Code Playgroud)
labels可以是一个函数,
group_name = sprintf("A[%i*x]", rep(1:4,each=2))
# alternatively, use gsub with your original vector
# group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x')
# gsub("A_([0-9])x","A[\\1*x]", group_name)
mydata2 <- data.frame(mygroup = group_name,
mysubgroup = factor(c("Yes", "No"),
levels = c("Yes", "No")),
value = c(60,40,90,10,55,45,88,12))
ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) +
geom_bar(position = "dodge", width = 0.5, stat = "identity")+
coord_flip() + scale_x_discrete(labels = function(l) parse(text=l))
Run Code Online (Sandbox Code Playgroud)