我开始使用lattice图形包但我偶然发现了一个问题.我希望有人可以帮助我.我想用相应的函数绘制直方图.
这是文件foo.r:
library("lattice")
data <- data.frame(c(1:2),c(2:3))
colnames(data) <- c("RT", "Type")
pdf("/tmp/baz.pdf")
histogram( ~ RT | factor(Type), data = data)
dev.off()
Run Code Online (Sandbox Code Playgroud)
当我使用R --vanilla < foo.r它运行此代码时,一切正常.
不过,如果我使用的是第二档bar.r用
source("bar")
Run Code Online (Sandbox Code Playgroud)
并运行R --vanilla < bar.r代码生成错误的pdf文件.现在我发现source("bar", echo=TRUE)解决了这个问题.这里发生了什么?这是一个错误还是我错过了什么?
我正在使用R版本2.13.1(2011-07-08)和lattice_0.19-30
我想将每个条形的值放在每个条形图顶部的条形图(晶格)中.但是,我找不到任何可以实现此目的的选项.我只能找到轴的选项.
我想弄清楚如何在ggplot中使用grconvertX/grconvertX.我的最终目标是使用和从用户坐标到设备坐标向ggplot2图形(可能是晶格)添加注释.我知道它可以用grobs完成,但我想知道是否有更简单的方法.grid.textgrid.lines
以下代码允许我将值从用户坐标传递到ndc坐标,并使用这些值来注释绘图grid.text.
graphics.off() # close graphics windows
library(grid)
library(gridBase)
test= data.frame(
x = c(1,2,3),
y = c(12,10,3),
n = c(75,76,73)
)
par(mar = c(13,5,2,3))
plot(test$y ~ test$x,type="b", ann=F)
for (i in 1:nrow(test))
{
X=grconvertX(i , from="user", to="ndc")
grid.text(x=X, y =0.2, label=paste("GRID.text at\nuser.x=", i, "\n", "ndc.x=", (signif( X, 5)) ) )
grid.lines(x=c(X, X), y = c(0.28, 0.33) )
}
#add some code to save as PDF ...
Run Code Online (Sandbox Code Playgroud)

该代码基于我以前的一篇文章的解决方案:混合X和Y坐标系.您可以看到原始图中的x坐标是如何转换为ndc的.这种方法的优点是我可以使用Y的设备坐标.
我假设我可以轻松地在ggplot2(也可能在 …
我使用RStudio(MacOS)需要2周时间,所以如果我忽略了一个可以解决我问题的明显功能,请原谅我.
作为一个项目,我试图重现一个箱形图,其中4个图表示净效益,给定疾病类型 - "非严重"(0)或"严重"(1) - 作为x轴标签,以及给予治疗 - "谈话疗法"(0)或"药物疗法"(1) - 作为x轴子标签.
到目前为止,这是我的脚本:
tx <- c(0,0,0,0,1,1,1,1)
dztype <- c(1,0,1,0,0,0,1,1)
NBwtp1000 <- c(-5500,-4000,-5000,-1000,-5000,-5000,-2800,-2000)
require(lattice)
bwplot(NBwtp1000 ~ paste0("Tx ", tx) | paste0("Disease Severity ", dztype),
xlab="Talk Therapy (Tx 0) or Drug Therapy (Tx 1)",
ylab="Net Benefit @ wtp 1000", horizontal=FALSE)
Run Code Online (Sandbox Code Playgroud)
如果你运行代码,你会看到盒子和胡须的情节:我几乎要感谢这个论坛上关于格子bwplot功能的一些信息性帖子.
但是,我对结果仍然很满意.我使用该paste0函数将字符串描述符添加到治疗组的X轴子标签(最初标记为"1,2",现在显示为"Tx 0,Tx 1"),但我理想地喜欢那些说"治疗"的子标签"和"药物治疗"分别.(我根本不知道如何取消现有的数字标签.)
同样,我希望面板标签在标签当前为0时显示"Not Severe",在标签当前为1时为"Severe".
我试图用相关矩阵制作一个图,并用三种颜色来表示使用库晶格的相关系数.
library(lattice)
levelplot(cor)
Run Code Online (Sandbox Code Playgroud)
我得到以下情节:

该图仅适用于我拥有的数据的子集.当我使用整个数据集(400X400)时,它变得不清楚,并且颜色没有正确显示并显示为点.对于大型矩阵,是否可以以平铺形式获得相同的内容?
我尝试使用pheatmap函数,但我不希望我的值被聚集,只是想要以tile形式清楚地表示高值和低值.
我在一个数据框上使用xyplot,并希望为一个面板函数提供不是(x,y,...)参数的数据,而是数据框的一些附加列(例如下面的例子中的k):
library(lattice)
mydata <- data.frame(xxx = 1:20,
yyy = rbinom(20,20,.5),
uuu = gl(2,10),
k = rnorm(20))
xyplot( formula = yyy ~ xxx | uuu, data = mydata,
panel = function(x,y,k, ...){
n <- x * k
panel.xyplot(n,y,...)
})
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为R不会将此k列提供给面板功能.有一个简单的方法吗?
(我不是试图在我的实际面板函数中将x乘以k.我正在调用另一个需要k的函数...)
非常感谢!
我xyplot在R中使用在一个图上绘制几行(按组):
xyplot(y~x,
type=c('l'),
scales=list(tck=c(1,0)),
main=list(label="Total decrease", cex=2),
xlab=list(label="Years", cex=1.5),
ylab=list(label="Percentage", cex=1.5),
groups= group,
data=df,
auto.key=list(columns=2, lines=TRUE, points=FALSE, cex=1.5))
Run Code Online (Sandbox Code Playgroud)
但是,我无法更改标签值的大小.我已经尝试更改参数cex.axis(在xlab和ylab选项中),但这不会改变沿x轴或y轴的值的大小.
有人可以帮忙吗?
马克,先谢谢你
我正在使用格子包,我想为我的身材添加一个图例.auto.key和legend的文档非常混乱,无法找出添加图例的正确语法.这是我的代码:
xyplot(y ~ x, df, pch=19, col=rgb(0.2, 0.4, 0.8, 0.7), cex=2,
scales=list(cex=1.7),
xlab=list("x", cex=1.ales=list(cex=1.7),
xlab=list("x", cex=1.7), ylab=list("y", cex=1.7),
main=list("Linear Regression w. Polynomial Attributes", cex=1.6),
auto.key=T,
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
llines(x, predict(lm.xtend), col="purple", lwd=6, lty=3)
llines(x, predict(ridge.lin), col="darkgreen", lwd=6, lty=2)
})
Run Code Online (Sandbox Code Playgroud)
图表如下所示,所以我只想为这些线条添加一个图例.

是否可以将spplot(spplot polygons)图例放在地图的左下角,就像这样?

我能得到的最接近的是(我没有发布我的数据,我只是使用示例数据,所以在这种情况下,尝试将图例放在地图的左上角):
data(meuse.grid)
gridded(meuse.grid)=~x+y
spplot(meuse.grid[,'dist'],
colorkey = list(space = "left", height = 0.5)
)
Run Code Online (Sandbox Code Playgroud)
但是图例位于页面中间,位于地图之外.不幸的是,colorkey论证不支持"bottomleft",或者x,y或者角落参数(参见参考资料?levelplot).我也尝试使用key.space参数,但它似乎只在绘图时起作用,SpatialPoints*但它似乎被忽略 SpatialPolygons*(或者像上面例子中的SpatialPixelsDataFrame).
如何在地层图中手动调整每个面板的x轴限制?
例如,这里Stratiplot来自analogue:
library(analogue)
data(V12.122)
Depths <- as.numeric(rownames(V12.122))
(plt <- Stratiplot(Depths ~ O.univ + G.ruber + G.tenel + G.pacR,
data = V12.122, type = c("h","l","g","smooth")))
Run Code Online (Sandbox Code Playgroud)
例如,我怎样才能将G.ruber的xlim改为c(0.3,0.9)和G.pacR改为c(0,0.75)?
或者,另一种可能性,strat.plot来自rioja:
library(rioja)
library(vegan) ## decorana
data(RLGH)
# remove less abundant taxa
mx <- apply(RLGH$spec, 2, max)
spec <- RLGH$spec[, mx > 3]
depth <- RLGH$depths$Depth
#basic stratigraphic plot
strat.plot(spec, y.rev=TRUE)
Run Code Online (Sandbox Code Playgroud)
例如,我怎样才能将TA004A的xlim更改为c(0,20)?
我想我需要提供一些东西来解决底层的格子/基础图代码,但我不知道如何开始使用它.