我想自定义绘图y轴的间隙(断点)。我尝试了两种选择。
option1: ylim(0.0,0.6)
option2: scale_y_continuous(breaks=seq(0.0, 0.6, 0.1))
option1的问题在于它在每0.2到y轴的限制中断,即0.6。 选项2的问题在于它给出了这种情节之间的巨大差异的错觉,因为它扩大了图的0.1段。
我想要的是每隔0.1断开y轴或者在显示y轴的最大极限时将其自定义为任意断点(在这种情况下为0.0到0.6但是每0.1断开)。
xVal = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
a = c(0.18340368127959822, 0.17496531617798133, 0.16772886654445848, 0.15934821062512169, 0.15390913489444036, 0.14578798884106348, 0.14524174121702108, 0.13958093302847951, 0.1365009715515553, 0.13337340345559975, 0.12995175856952607, 0.12583603207983862, 0.12180656145228715, 0.11824179486798418, 0.11524630600365712)
b = c(0.13544353787855531, 0.11345498050033079, 0.11449834060237293, 0.10479213576778054, 0.09677430524414686, 0.091990671548439179, 0.089965934807318487, 0.088711600335474206, 0.088923403079789909, 0.087989321310275717, 0.085424600757017272, 0.08251334730889931, 0.080178280060313953, 0.077717041621392688, 0.076638743116633837)
c = c(0.087351324973658093, 0.12113308515702567, 0.11422800742900453, 0.11264309199970789, 0.11390287790920843, 0.10774426268894192, 0.10587704437111881, 0.10474954948318291, 0.10568277685778472, 0.10201545270338952, 0.09939827283775747, 0.098062403381144761, 0.094110034623398231, 0.091211408116407641, 0.089369778116029489)
library(ggplot2)
library(reshape2)
df = data.frame(xVal, a, b, c)
df.melt = melt(df, id="xVal")
问题1:
ggplot(data=df.melt, aes(x=xVal, y=value, colour=variable)) +
geom_point() +
geom_line() +
xlab("xVal") + ylab("YValues") + xlim(1,16) +
ylim(0.0,0.6)
problem2:
ggplot(data=df.melt, aes(x=xVal, y=value, colour=variable)) +
geom_point() +
geom_line() +
xlab("xVal") + ylab("YValues") + xlim(1,16) +
scale_y_continuous(breaks=seq(0.0, 0.6, 0.1))
如何根据我指定的值自定义y轴,以便中断。
答案 0 :(得分:7)
见下文。您需要设置中断和限制。否则你可能不喜欢选择的休息时间,或者它可能放大数据而不显示你的休息时间。
library(ggplot2)
library(reshape2)
xVal = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
a = c(0.18340368127959822, 0.17496531617798133, 0.16772886654445848, 0.15934821062512169, 0.15390913489444036, 0.14578798884106348, 0.14524174121702108, 0.13958093302847951, 0.1365009715515553, 0.13337340345559975, 0.12995175856952607, 0.12583603207983862, 0.12180656145228715, 0.11824179486798418, 0.11524630600365712)
b = c(0.13544353787855531, 0.11345498050033079, 0.11449834060237293, 0.10479213576778054, 0.09677430524414686, 0.091990671548439179, 0.089965934807318487, 0.088711600335474206, 0.088923403079789909, 0.087989321310275717, 0.085424600757017272, 0.08251334730889931, 0.080178280060313953, 0.077717041621392688, 0.076638743116633837)
c = c(0.087351324973658093, 0.12113308515702567, 0.11422800742900453, 0.11264309199970789, 0.11390287790920843, 0.10774426268894192, 0.10587704437111881, 0.10474954948318291, 0.10568277685778472, 0.10201545270338952, 0.09939827283775747, 0.098062403381144761, 0.094110034623398231, 0.091211408116407641, 0.089369778116029489)
df = data.frame(xVal, a, b, c)
df.melt = melt(df, id="xVal")
ggplot(data=df.melt,
aes(x=xVal, y=value, colour=variable)) + geom_point() +
geom_line() + xlab("xVal") + ylab("YValues") + xlim(1,16) + scale_y_continuous(breaks=seq(0.0, 0.6, 0.1), limits=c(0, 0.6))
答案 1 :(得分:7)
这是另一种解决方案,特别是如果您想使用自定义限制。 从scale_y_continuous的文档:break可以是"一个函数,它将限制作为输入并返回break作为输出"。
因此,如果您设置限制,则只需添加:
custom_lims = c(0, 0.6)
... + scale_y_continuous(breaks=function(lims) {seq(lims[1], lims[2], 0.1)}, limits = custom_lims)