【发布时间】:2015-03-14 21:13:31
【问题描述】:
改编自这个已回答的问题:Customize axis labels 下面 MWE 中的这一行可以解析手动指定的 x 轴标签/值:
scale_x_discrete(labels=parse(text=c("The~First~Value","A~Second~Value","Finally~Third~Value")))
但任何尝试将 c() 动态替换为 xo(即包含导入表达式的有序列表)都会失败...
如何格式化或调整此列以使其正常工作?我很困惑,因为 parse 命令在 c() 的内容上运行良好...
在下面的模拟数据框中,为简单起见,我在此示例中包含的唯一字符是~(用于解析和产生空间)。完整上下文将包含从外部管理的表中导入的上标、下标、符号和希腊字符。
MWE:
library(ggplot2)
print("Program started")
z <- c("1","2","3")
x <- c("The~First~Value","A~Second~Value","Finally~Third~Value")
s <- c("No","No","No","Yes","Yes","Yes")
y <- c(1,2,3,2,3,4)
df <- as.data.frame(cbind(x=c(x,x),s=s,y=y,z=c(z,z)))
##########################################################################
xo <- as.data.frame(cbind(z,x))
xo <- xo[,"x"]
df[,"x"] <- factor(df[,"x"], levels=xo,ordered=TRUE)
##########################################################################
#xo <- levels(droplevels(xo))
gg <- ggplot(data = df, aes_string(x="x", y="y", weight="y", ymin=paste0("y"), ymax=paste0("y"), fill="s"));
dodge_str <- position_dodge(width = NULL, height = NULL);
gg <- gg + geom_bar(position=dodge_str, stat="identity", size=.3, colour = "black",width=.5)
#gg <- gg + scale_x_discrete(labels=parse(text=c("The~First~Value","A~Second~Value","Finally~Third~Value")))
gg <- gg + scale_x_discrete(labels=parse(text=c(xo)))
print(gg)
print("Program complete - a graph should be visible.")
【问题讨论】:
-
为什么不对 x 使用有序因子?然后,因子排序基于 c,因子标记基于 x。