我有一个巨大的文件,我不知道我可以在这里给出的小测试数据集在图中产生同样的问题,所以我不会给出任何测试数据集,我只会附上图表图像这里显示问题。
我的代码:
ggplot(tgc, aes(x=Week, y=MuFreq)) +
theme_gray(base_size=18) +
theme(plot.title=element_text(hjust=.5),
axis.title.x = element_text(face="bold"),
axis.title.y = element_text(face="bold")) +
geom_errorbar(aes(ymin=MuFreq-(1.96*se), ymax=MuFreq+(1.96*se)), width=3) +
geom_line() +
geom_point(aes(size= N), color="blue")+
scale_x_continuous(breaks=c(68,98,188), labels=c("Wk68", "Wk98", "Wk188")) +
scale_y_continuous(limits=c(0,0.15)) +
scale_size( breaks = unique(tgc$N))
所以问题是我根据每周的样本大小确定点的大小,中间点实际上有与之关联的误差条,但它覆盖了误差条。我尝试使用水平误差条,但它没有工作,因为我的x轴被定制为非数字。
我该怎么做才能显示被覆盖的错误栏?
还有什么方法可以使背景垂直网格线均匀分布?
答案 0 :(得分:0)
Q要求改进ggplot2
图表中的两件事:
由于OP没有提供任何数据,我们需要一个虚拟数据集。这可以通过从图中读取值来轻松完成:
tgc <- data.frame(Week = c(68, 98, 188),
MuFreq = c(0.08, 0.09, 0.091),
se = c(0.003, 0.001, 0.019)/1.96,
N = c(91, 835, 7))
这很好地再现了原始情节:
这个人正在接受Nick Criswell的评论:
加
使用此代码
library(ggplot2)
ggplot(tgc, aes(x = Week, y = MuFreq)) +
theme_gray(base_size = 18) +
theme(plot.title = element_text(hjust = .5),
axis.title = element_text(face = "bold")) +
geom_line() +
geom_point(aes(size = N), color = "dodgerblue1", alpha = 0.5) +
geom_errorbar(aes(ymin = MuFreq - (1.96 * se),
ymax = MuFreq + (1.96 * se)), width = 3) +
scale_x_continuous(
breaks = c(68, 98, 188),
labels = c("Wk68", "Wk98", "Wk188"),
minor_breaks = NULL
) +
scale_y_continuous(limits = c(0, 0.15)) +
scale_size(breaks = unique(tgc$N))
我们得到:
为了在x轴上获得均匀间隔的数据点,我们可以将周数转换为因子。这需要告诉ggplot2
数据属于一个组,以便绘制线条并添加自定义x轴标签。
此外,使用theme_bw
代替theme_gray
:
library(ggplot2)
ggplot(tgc, aes(x = factor(Week, labels = c("Wk68", "Wk98", "Wk188")),
y = MuFreq, group = 1)) +
theme_bw(base_size = 18) +
theme(plot.title = element_text(hjust = .5),
axis.title = element_text(face = "bold")) +
geom_line() +
geom_point(aes(size = N), color = "dodgerblue1", alpha = 0.5) +
geom_errorbar(aes(ymin = MuFreq - (1.96 * se),
ymax = MuFreq + (1.96 * se)), width = 0.05 ) +
scale_y_continuous(limits = c(0, 0.15)) +
scale_size(breaks = unique(tgc$N)) +
xlab("Week")