【发布时间】:2021-10-05 03:04:13
【问题描述】:
让我们考虑以下数据
analysisdata$question = c("Q1","Q1","Q1","Q2","Q2","Q2","Q3","Q3","Q3","Q4","Q4","Q4")
analysisdata$name = c("G1","G2","G3","G1","G2","G3","G1","G2","G3","G1","G2","G3")
analysisdata$pointEstimate = c(1,2,3,1,2,3,1,2,3,1,2,3)
analysisdata$ci.max = c(2,3,4,2,3,4,2,3,4,2,3,4)
analysisdata$ci.min = c(0,1,2,0,1,2,0,1,2,0,1,2)
以及以下绘图功能:
plotCI <- function(data, ymin = 0, ymax = 1.0, xlab = "XLAB", ylab = "YLAB"){
pd = position_dodge(.6) ### How much to jitter the points on the plot
g <- ggplot(data, ### The data frame to use.
aes(x = factor(y_axis_items),
y = measure,
color = factor(legend_factor))) +
geom_point(size = 2, position = pd) +
geom_errorbar(aes(ymin = upperBound_CI,
ymax = lowerBound_CI),
width = 0.2,
size = 0.7,
position = pd) +
coord_flip() +
scale_y_continuous(limits = c(ymin,ymax)) +
theme(panel.background = element_rect(fill = 'white', colour = 'white'),axis.title=element_text(size = rel(1.2), colour = "black"),axis.text=element_text(size = rel(1.2), colour = "black"),panel.grid.major = element_line(colour = "#DDDDDD"),panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank())+ theme(axis.title = element_text(face = "bold")) +
xlab(xlab)+
ylab(ylab);
print(g)
}
如果我调用此代码
dataToPrint <- data.frame(factor(analysisdata$name),factor(analysisdata$question),analysisdata$pointEstimate, analysisdata$ci.max, analysisdata$ci.min)
colnames(dataToPrint) <- c("legend_factor", "y_axis_items","measure", "lowerBound_CI", "upperBound_CI")
plotCI(dataToPrint, xlab="Questions", ylab="", ymax=5)
它给了我下面的图表:
但是,我想在这里做的是尝试将 y 轴上的排序排序不同,比如 G1 在顶部,然后是 G2、G3、G4(但为了有一些可重用的东西再多一点,让我们想象一下只是颠倒字母顺序的解决方案是不行的,我想要一个自定义顺序)。我还希望能够按照图例出现在图表上的顺序对图例进行排序(所以 G3 在此处的顶部)。
我尝试将以下内容添加到我的绘图函数 scale_x_discrete(limits=data$y_axis_item) + 中,但这最终会产生错误类型的图表,并且不能解决我的问题。
有没有人可以解决这个问题。我在这里发现了一些问题,这些问题使用因素来保留数据框中的特定顺序,但是当我的数据框中有重复的 ID 时,这不起作用:
提前感谢您的帮助。
【问题讨论】: