我想将平均值和标准误差绘制为水平条形图,我希望平均值排序.
我找到了使用晶格绘制水平排序条形图的方法,但我不知道如何添加错误标记.以下是我的数据和我提出的R代码.
data <- structure(c(0.67, 0.67, 0.76, 0.66, 0.71, 0.6, 0.52, 0.6, 0.71, 0.76,
0.76, 0.71, 0.6, 0.61, 0.9, 0.5, 0.58, 0.84, 0.68, 0.88,
0.89, 0.96, 1, 0.95, 1, 1, 0.98, 0.78, 0.98, 1,
1, 0.99, 1, 1, 0.95, 0.92, 1, 0.91, 1, 0.87,
0.91, 0.72, 0.73, 0.55, 0.82, 0.87, 0.64, 0.75, 0.75, 1,
0.81, 0.79, 1, 0.74, 0.57, 0.84, 1, 0.95, 0.78, 0.95), .Dim = c(20L, 3L), .Dimnames = list(
c("1", "2", "3", "4", "5", "6", "7", "8", "9", …Run Code Online (Sandbox Code Playgroud) 我想在现有情节的一个小区域中拟合整个格子图.
xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos, type = "a")
pushViewport(viewport(.2, .7, .2, .2))
grid.rect(gp=gpar(fill="white"))
Run Code Online (Sandbox Code Playgroud)
给我这个:

因此视口被推动.但是当再次调用晶格函数时,它会使用整个器件,就像调用grid.newpage():
xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos, type = "a")
Run Code Online (Sandbox Code Playgroud)
有没有办法将晶格图限制在设备上的预定义区域,就像上面的例子一样?
我有以下条形图,我想添加错误栏.
library(lattice)
barchart(Change~fTreat,groups=Process,change,
auto.key=list(points=FALSE,rectangles=TRUE),
panel=function(x, y,...){
panel.barchart(x,y,origin = 0,...);
panel.abline(h=0,col="black",...);
}
)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用memisc包中的panel.errbars,它对xyplots非常有用,但是当我将它添加到我的代码时它不尊重这些组.
library(memisc)
barchart(cbind(Change,lower,upper)~fTreat,groups=Process,change,
ylab="Pocertage change",
ylim=-115:50,
scales=list(alternating=FALSE,
tick.number=7,
tck=c(-1,0)),
panel=function(x, y,groups,...){
panel.barchart(x,y=change$Change,groups=change$Process,origin = 0,...);
panel.abline(h=0,col="black",...);
panel.errbars(x,y,make.grid="none",ewidth=0.2,type="n",...)
}
)
Run Code Online (Sandbox Code Playgroud)
有关如何使用panel.errbars或任何其他功能向我的绘图添加错误栏的任何想法?
数据:
structure(list(Treat = structure(c(3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L), .Label = c("12-380", "12-750", "8-380", "8-750"), class = "factor"),
Process = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Resp",
"Cal"), class = c("ordered", "factor")), Change = c(-33.05,
-34.74, 20.94, 18.06, 6.85, -28.57, -8.1, -78.72), upper …Run Code Online (Sandbox Code Playgroud) 我正在使用格子包中的条形图.我有10年的时间序列数据,我希望x轴以%b-%Y的格式显示,每隔六个月.这在xyplot(给定日期DateVector的向量)中通过以下语法完成:
scales=list(x=list(format = "%b-%Y",tick.number = length(DateVector)/2))
Run Code Online (Sandbox Code Playgroud)
barchart忽略了设计因素的tick.number选项,因此x轴对于大量数据标签变得不可读.如何减少刻度和/或刻度标签的数量?
这是一个简单的例子,重现我的问题,数据跟随(将数据保存为Testrr.csv运行,如果这是错误的格式,这是我第一次道歉;)
library(lattice)
inptTrans <- read.csv("Testrr.csv")
inptTrans$NotherTime <- as.Date(as.character(inptTrans$TransDateS),"%m/%d/%Y")
xyp2 <- barchart (NumE+NumF~ NotherTime, data=inptTrans, main = sprintf("Total")
,type='r',xlab = '',ylab='',col=c('red','black')
,horizontal=FALSE
,scales=list(x=list( rot=45,cex=1.0 ,
labels=format(inptTrans$NotherTime,"%b-%Y"),tick.number=2)
)
,key=list(text = list(c("Num F","Num E"))
,rectangle=list(col=c('black','red') ),columns = 2
,corner = c(0.05,-0.11),lty = c(1),lwd=3)
,stack=TRUE
)
png(sprintf('Testrr.png'),width = 900, height = 750)
print(xyp2)
dev.off()
Run Code Online (Sandbox Code Playgroud)
Testrr.csv:
TransDateS,NumTot,NumF,NumE
01/15/2003,339486,18478,293879
02/15/2003,343761,16430,295272
03/15/2003,413700,17924,356004
04/15/2003,432741,18260,377046
05/15/2003,465439,18721,406632
06/15/2003,490699,18276,424773
07/15/2003,507818,18354,440237
08/15/2003,506530,17391,437386
09/15/2003,481039,17809,411568
10/15/2003,483364,19507,412902
11/15/2003,392189,16308,329675
12/15/2003,444249,18342,367489
01/15/2004,364662,20009,308456
02/15/2004,389718,16894,329946
03/15/2004,511386,20207,434052
04/15/2004,525563,19867,452646
05/15/2004,538570,17557,463289
06/15/2004,620868,20386,535523
07/15/2004,581368,20844,500511
08/15/2004,580773,19687,495930
09/15/2004,523992,21322,442304 …Run Code Online (Sandbox Code Playgroud) 几天前,我设法使用插值在脚本中使用以下命令制作水平图:
levelplot(jan~lon*lat,APM,main="Jan",panel=panel.levelplot.raster,interpolate=T)
Run Code Online (Sandbox Code Playgroud)
我偶然没有保留那个会话,只有脚本,所以我不可能通过历史记录并恢复我用过的所有命令.
现在,在加载latticeExtra之后,相同的命令会生成一个空图.另一方面,省略指令的最后两个元素,即:
levelplot(jan~lon*lat,APM,main="Jan")
Run Code Online (Sandbox Code Playgroud)
绘制图表.
我想在表面进行插值,但是出了点问题
panel=panel.levelplot.raster
Run Code Online (Sandbox Code Playgroud)
加载rasterVis时会发生相同的行为.我想我错过了什么......有什么帮助吗?
数据具有以下结构:
> head(APM)
lat lon jan feb mar apr may jun jul aug sep oct nov dec
1 -18.5 10.5 29.7 28.8 25.6 25.6 26.8 29.9 35.5 46.8 35.5 27.5 27.5 27.9
2 -17.5 10.5 28.8 29.8 26.3 26.2 27.8 31.6 39.7 63.1 40.4 27.6 27.6 28.3
3 -16.5 10.5 28.7 30.0 26.9 26.8 28.6 32.1 41.1 109.4 42.8 29.7 28.9 29.4
4 -15.5 10.5 28.4 29.5 27.5 26.9 29.1 34.2 …Run Code Online (Sandbox Code Playgroud) 以下示例数据为例:
x <- rnorm(10000)
y <- rnorm(10000) * x
z <- rnorm(10000) * y
df <- data.frame(x,y,z)
Run Code Online (Sandbox Code Playgroud)
我们可以生成散点图矩阵,如下所示:
splom(df)
Run Code Online (Sandbox Code Playgroud)

但由于大量的重叠点,很难测量密度.
是否有一种直接的方法用双变量直方图热图替换每个图,就像壁球产生的那样?
library(squash)
hist2(df$x, df$y)
Run Code Online (Sandbox Code Playgroud)

大家好,我正在格子图中工作,一切正常,但我对传奇有些麻烦.我正在使用xyplot(),它的工作原理很棒.我的数据框是NM(我dput()在最后部分添加了版本):
AMes A2009 A2010 A2011 A2012 A2013 A2014
1 enero 710004.3 1458624.4 6229245 4407423 3006568 1749746
2 febrero 889398.1 942099.6 5553163 4248144 2615730 1902865
3 marzo 1114883.1 1210951.2 6372920 3537103 2833299 1605746
4 abril 1419242.1 1151423.9 6755055 3500596 3438797 2116088
5 mayo 1585857.2 1598355.1 7119008 4049074 3224926 NA
6 junio 1010455.6 1370856.8 7585412 3279869 2794030 NA
7 julio 1292333.4 1420547.4 7258676 3420974 3003458 NA
8 agosto 1032443.3 2048291.1 7250944 2602310 2486932 NA
9 septiembre …Run Code Online (Sandbox Code Playgroud) 我试图用来levelplot绘制一个简单的数字高程模型(DEM).
这是我的代码:
r1 = raster("ned10dem.tif")
e = extent(460000,480000,4555000,4567500)
rr1 = crop(r1,e)
p = levelplot(rr1, scales=list(x=list(at=seq(450000,480000,4000))),
margin=F, cuts=200,
col.regions = terrain.colors(350,alpha=1),
colorkey=list(space="bottom"),
xlab="Easting(m)", ylab="Northing(m)")
plot(p)
Run Code Online (Sandbox Code Playgroud)
情节最终看起来像这样:

我无法弄清楚的是如何增加colorkey和x轴之间的空间,使得colorkey不会覆盖x轴标签.
我正在开发一个交互式散点图,以便当用户滚动数据点时,会显示一个标签.但是,我还想在某些数据点之间添加边.
我成功地使用几个库开发了交互式散点图,包括grid,gridSVG,lattice和adegraphics.以下是MWE:
library(grid)
library(gridSVG)
library(lattice)
library(adegraphics)
x = rnorm(10)
y = rnorm(10)
dat = data.frame(label = letters[1:10], x, y)
customPanel2 <- function(x, y, ...) {
for (j in 1:nrow(dat)) {
grid.circle(x[j], y[j], r = unit(.5, "mm"),
default.unit = "native",
name = paste("point", j, sep = "."))
}
}
xyplot(y ~ x, panel = customPanel2, xlab = "x variable", ylab=NULL, scales=list(tck = c(1,0), y=list(at=NULL)))
for (i in 1:nrow(dat)) {
grid.text(as.character(dat$label)[i], x = 0.1, y = 0.01, just = c("left", "bottom"), name …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R在Excel上制作的图表进行复制,这应该表示围绕时间序列预测的95%置信区间(CI).Excel图表如下所示:
所以,基本上,原始的历史时间序列,并从某个时间点预测它可能与其各自的CI.
他们在Excel上完成的方式效率有点低:
显然,生成预测和CI的计算速度更快,更容易推广和使用R,虽然我可以在R上完成任务然后只需复制Excel上的输出来绘制图表,在R中执行所有操作更好.
在问题的最后,我提供了dput()@MLavoie建议的原始数据.
在这里我加载的包(不确定你在这里需要它们,但它们是我经常使用的):
require(zoo)
require(xts)
require(lattice)
require(latticeExtra)
Run Code Online (Sandbox Code Playgroud)
对于前100行,我的数据如下所示:
> head(data)
fifth_percentile Median nintyfifth_percentile
2017-06-18 1.146267 1.146267 1.146267
2017-06-19 1.134643 1.134643 1.134643
2017-06-20 1.125664 1.125664 1.125664
2017-06-21 1.129037 1.129037 1.129037
2017-06-22 1.147542 1.147542 1.147542
2017-06-23 1.159989 1.159989 1.159989
Run Code Online (Sandbox Code Playgroud)
然后在100个数据点之后,时间序列开始发散,最后它们看起来像这样:
> tail(data)
fifth_percentile Median nintyfifth_percentile
2017-12-30 0.9430930 1.125844 1.341603
2017-12-31 0.9435227 1.127391 1.354928
2018-01-01 0.9417235 1.124625 1.355527
2018-01-02 0.9470077 1.124088 1.361420
2018-01-03 0.9571596 1.127299 1.364005
2018-01-04 0.9515535 1.127978 1.369536
Run Code Online (Sandbox Code Playgroud)
解决方案由DaveTurek提供
感谢DaveTurek,我找到了答案.但是,唯一不同的是,对于我的xts数据帧,显然,我需要先将每列转换为数字(with …