更改 ggplot2 中次要网格线的数量(每个主要网格线),r
Change number of minor gridlines in ggplot2 (per major ones), r
我读了这个答案:How to control number of minor grid lines in ggplot2?
尽管我想不出一种方法来使它符合我的要求。
我希望有一种方法可以输入两个主要刻度之间的次要网格线的数量。 (或次要网格大小与主要网格大小的比率)假设我想将其分成 5 个部分(4 条次要网格线)。我该怎么做?
由于会有很多图表,我不知道其中的轴限制,所以我无法明确定义一个小网格线步长的大小。我想使用 ggplot2 使用的任何算法来选择主要网格线的数量,并且只有 4 倍的次要网格线。
我希望右侧的 r 图看起来像左侧的 excel 图
CODE(有助于解决问题)
ggtheme <- theme(axis.line = element_line(size = 0.5, colour = "black"),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(colour="grey90",size = rel(0.5)),
panel.grid.minor = element_line(colour="grey95",size = rel(0.25)));
ggp_sctr2 = ggplot( sub2_ac_data, aes(x=(sub2_ac_data[,i]),
y=sub2_ac_data[, rescol], colour = factor(sub2_ac_data[,topfac[1]]),
shape = factor(sub2_ac_data[,topfac[1]]) )) + geom_point(size = 2.5) +
scale_shape_manual(values=symlist[Nmsn_sub1+1:20]) +
scale_colour_manual(values = unname(cols[Nmsn_sub1+1:16])) +
geom_smooth(method="lm", formula = y ~ splines::bs(x, 3),
linetype = "solid", size = 0.25,fill = NA )
print(ggp_sctr2 + ggtitle( paste(scxnam[1],nomvar,
"vs",colnames(sub2_ac_data[i]),i, sep = " ")) +
theme(axis.text.x=element_text(angle = 90, hjust = 1,vjust = 0.5,size=8)) +
labs(x = colnames(sub2_ac_data[i]), y=colnames(sub2_ac_data[rescol]),
colour=colnames(sub2_ac_data[topfac[1]]),
shape=colnames(sub2_ac_data[topfac[1]])) + ggtheme +
theme(plot.title = element_text(face = "bold", size = 16,hjust = 0.5))) ;
我找到了一种可能的解决方案,虽然它不是很优雅。*
基本上,您提取主要网格线,然后根据乘数创建一系列次要网格线。
我已经回答了一个相关问题(作为对 Eric Watt 回答的修改)。这只是语法的变化,在任何文档中都没有很好地解释。
这是link:
代码如下:
library(ggplot2)
df <- data.frame(x = 0:10,
y = 10:20)
p <- ggplot(df, aes(x,y)) + geom_point()
majors <- ggplot_build(p)$layout$panel_params[[1]]$x.major_source;majors
multiplier <- 5
minors <- seq(from = min(majors),
to = max(majors),
length.out = ((length(majors) - 1) * multiplier) + 1);minors
p + scale_x_continuous(minor_breaks = minors)
*不是很优雅因为:
如果图表没有得到任何数据,它会失败(这可能在循环中发生,因此需要为其创建例外)。
它只从现有主要网格线的最小值到最大值开始次要网格线,而不是贯穿坐标space可以放置点的末端
我读了这个答案:How to control number of minor grid lines in ggplot2?
尽管我想不出一种方法来使它符合我的要求。
我希望有一种方法可以输入两个主要刻度之间的次要网格线的数量。 (或次要网格大小与主要网格大小的比率)假设我想将其分成 5 个部分(4 条次要网格线)。我该怎么做?
由于会有很多图表,我不知道其中的轴限制,所以我无法明确定义一个小网格线步长的大小。我想使用 ggplot2 使用的任何算法来选择主要网格线的数量,并且只有 4 倍的次要网格线。
我希望右侧的 r 图看起来像左侧的 excel 图
CODE(有助于解决问题)
ggtheme <- theme(axis.line = element_line(size = 0.5, colour = "black"),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(colour="grey90",size = rel(0.5)),
panel.grid.minor = element_line(colour="grey95",size = rel(0.25)));
ggp_sctr2 = ggplot( sub2_ac_data, aes(x=(sub2_ac_data[,i]),
y=sub2_ac_data[, rescol], colour = factor(sub2_ac_data[,topfac[1]]),
shape = factor(sub2_ac_data[,topfac[1]]) )) + geom_point(size = 2.5) +
scale_shape_manual(values=symlist[Nmsn_sub1+1:20]) +
scale_colour_manual(values = unname(cols[Nmsn_sub1+1:16])) +
geom_smooth(method="lm", formula = y ~ splines::bs(x, 3),
linetype = "solid", size = 0.25,fill = NA )
print(ggp_sctr2 + ggtitle( paste(scxnam[1],nomvar,
"vs",colnames(sub2_ac_data[i]),i, sep = " ")) +
theme(axis.text.x=element_text(angle = 90, hjust = 1,vjust = 0.5,size=8)) +
labs(x = colnames(sub2_ac_data[i]), y=colnames(sub2_ac_data[rescol]),
colour=colnames(sub2_ac_data[topfac[1]]),
shape=colnames(sub2_ac_data[topfac[1]])) + ggtheme +
theme(plot.title = element_text(face = "bold", size = 16,hjust = 0.5))) ;
我找到了一种可能的解决方案,虽然它不是很优雅。*
基本上,您提取主要网格线,然后根据乘数创建一系列次要网格线。
我已经回答了一个相关问题(作为对 Eric Watt 回答的修改)。这只是语法的变化,在任何文档中都没有很好地解释。
这是link:
代码如下:
library(ggplot2)
df <- data.frame(x = 0:10,
y = 10:20)
p <- ggplot(df, aes(x,y)) + geom_point()
majors <- ggplot_build(p)$layout$panel_params[[1]]$x.major_source;majors
multiplier <- 5
minors <- seq(from = min(majors),
to = max(majors),
length.out = ((length(majors) - 1) * multiplier) + 1);minors
p + scale_x_continuous(minor_breaks = minors)
*不是很优雅因为:
如果图表没有得到任何数据,它会失败(这可能在循环中发生,因此需要为其创建例外)。
它只从现有主要网格线的最小值到最大值开始次要网格线,而不是贯穿坐标space可以放置点的末端