如果在ggplot中指定轴限制,则删除外围点.这适用于点,但您可能希望绘制与指定范围相交的线,但ggplot range或xlim/ylim方法会删除这些.是否有另一种方法来指定绘图轴范围而不删除外围数据?
例如
require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)
Run Code Online (Sandbox Code Playgroud) # data
set.seed (123)
xvar <- c(rnorm (1000, 50, 30), rnorm (1000, 40, 10), rnorm (1000, 70, 10))
yvar <- xvar + rnorm (length (xvar), 0, 20)
myd <- data.frame (xvar, yvar)
# density plot for xvar
upperp = 80 # upper cutoff
lowerp = 30 # lower cutoff
x <- myd$xvar
plot(density(x))
dens <- density(x)
x11 <- min(which(dens$x <= lowerp))
x12 <- max(which(dens$x <= lowerp))
x21 <- min(which(dens$x > upperp))
x22 <- max(which(dens$x > upperp))
with(dens, polygon(x = c(x[c(x11, …Run Code Online (Sandbox Code Playgroud) 这个问题与这个问题类似:How to set limit foraxes in ggplot2 Rplots? ,不同之处在于我只想限制一侧(例如仅绘制 x>0 而不是 -5000 < x < 5000 )并使用facets.
请注意,我想知道这两种简单情况的解决方案:
scale_x_continuous(limits = c(-5000, 5000))(与 相同xlim(-5000, 5000)) - 它完全不考虑点(例如,它们不会用于geom_smooth())
coord_cartesian(xlim = c(-5000, 5000))函数 - 它只是不绘制它们(但仍然用于 geom_smooth())
当您使用facet_wrap(~veg, scales = "free_x)并且不知道每个方面的 x 上限是多少时,这种情况经常发生,但您知道它们总是积极的。
基本问题,ggplot似乎没有做我期望的事情.
ggplot(data=data.frame( x=c(-1,2),y=c(-1,2) ), aes(x=x,y=y)) +
geom_blank() +
geom_abline(slope = -1 , intercept = 1)
Run Code Online (Sandbox Code Playgroud)
我期待这个情节:
它正在密谋:
在进行传统绘图时,我可以使用xlim和ylim来显示我想要绘制的范围.
我怎样才能在ggplot中实现这一目标?
编辑:我绘制的数据集示例:
real <- read.table("http://pelinfamily.ca/bio/GDR-18_conc.ld", header=F)
dd <- data.frame(Distance=real[,2]-real[,1], r.2=real[,13])
ggplot(dd, aes(x=Distance, y=r.2)) +
stat_summary(fun.data="mean_sdl", mult=1, geom="ribbon", alpha=.4) +
stat_summary(fun.data="mean_sdl", mult=1, geom="line")
Run Code Online (Sandbox Code Playgroud) 用ggplot制作一个情节,我希望准确设置我的轴.我知道我可以设置绘图范围(例如,对于x轴我指定的限制从2到4),coord_cartesian()但是在我指定的范围的左侧和右侧留下一点空间:
以上MWE的代码:
library(ggplot2)
data.mwe = cbind.data.frame(x = 1:5, y = 2:6)
plot.mwe = ggplot(data = data.mwe, aes(x=x,y=y)) + geom_line() + coord_cartesian(xlim = c(2,4))
print(plot.mwe)
Run Code Online (Sandbox Code Playgroud)
我想要的结果是一个图表,其中显示的区域正好在我指定的限制之间.
我知道
如何在ggplot2 R图中设置轴的限制?
但它没有回答我的问题,因为它产生了上面不希望的结果,或者削减了观察结果(带有limits参数scale_x_continuous).我知道我可以修改设置较小的限制范围,但我正在寻找一个干净的结果.至少我想知道实际范围与我指定的范围有多大,以便我可以相应地调整我的限制.
我正在尝试绘制随时间变化的值并出现错误:
Error: Invalid input: date_trans works with objects of class Date only
Run Code Online (Sandbox Code Playgroud)
我在这篇文章以及这里的文章中解决了早期的问题。我想设置x轴的最小值和最大值,以删除没有数据的图的最末端的空白。
该代码称为绘图,但没有校正的x轴。
ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
geom_line(size = 1)+
theme(axis.text.x=element_text(angle=30, hjust=1))
Run Code Online (Sandbox Code Playgroud)
我尝试使用scale_x_date下面的代码来设置x轴的限制-这会产生错误。
ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
geom_line(size = 1)+
theme(axis.text.x=element_text(angle=30, hjust=1))+
scale_x_date(breaks = "1 week", labels=date_format("%b-%d-%Y"),
limits = as.Date(c("2014-01-6","2014-02-15")))
Run Code Online (Sandbox Code Playgroud)
一个dput()我的数据如下。我正在使用最新版本的R,并且正在运行Windows 7。
提前致谢。
dta <- structure(list(IndID = c("BHS_011_A", "BHS_011_A", "BHS_011_A",
"BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A",
"BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A",
"BHS_015_A", …Run Code Online (Sandbox Code Playgroud) 使用 stat_summary 将均值和 ci 与箱线图一起绘制到图上
p1 <- ggplot(data=df, aes(x=group, y=metric ) ) +
geom_boxplot(outlier.shape = NA, fill = fill, color=line, alpha = 0.5) +
stat_summary(fun.data=mean_cl_normal, aes(color = "Mean and CI"))
Run Code Online (Sandbox Code Playgroud)
除此之外,我还要求限制 y 轴以避免显示超出范围的值。这是通过
p1 <- p1 + scale_y_continuous(limits =c(lower.limit,upper.limit) )
Run Code Online (Sandbox Code Playgroud)
但是,观察到应用限制时,图中所示的平均值与未应用限制的情况不同。这是预期的工作方式吗?似乎 stat_summary 只包括通过应用的限制内的点scale_y_continuous
stat_summary即使应用了轴限制,有没有一种方法可以使用包括图中限制之外的点来获得均值和 ci ?
如何将轴范围设置为与指定完全相同?
对于以下示例,我希望 x 轴在 0% 处交叉(而不是如图所示的 -0.5%),并且我希望顶部值为 12%(而不是 12.5%)
我都尝试过:
scale_x_continuous(limits = c(0, 0.12))
Run Code Online (Sandbox Code Playgroud)
和
coord_cartesian(ylim = c(0, 0.12))
Run Code Online (Sandbox Code Playgroud)
按照:
示例代码:
myData = data.frame(x = c(0, 1, 2, 3, 4, 5),
y = c(0.05,0.06, 0.07, 0.08, 0.09, 0.09))
ggplot() +
geom_step(data=myData, aes(x=x, y=y), color='orange', size=1) +
xlab('') +
ylab('') +
scale_y_continuous(labels = scales::percent, limits=c(0,0.12))
ggplot() +
geom_step(data=myData, aes(x=x, y=y), color='blue', size=1) +
xlab('') +
ylab('') +
scale_y_continuous(labels = scales::percent) +
coord_cartesian(ylim = c(0,0.12)) …Run Code Online (Sandbox Code Playgroud)