gpt4 book ai didi

r - 自定义格子条形图中条的边框绘制

转载 作者:行者123 更新时间:2023-12-04 23:49:02 24 4
gpt4 key购买 nike

在我绝望地发表论文的尝试中,我试图从一个简单的数据中制作一个精美的信息图表,但徒劳无功,希望用有吸引力的图片来吸引评论者。作为一种选择,我正在制作在每个条形底部带有延长线的条形图,类似于由 Nicholas Felton in this example 创建的那些。 .

因此,总体而言,大多数情况下进展顺利。但是我正在使用一个非常便宜的技巧在每个条形的底部创建那些“扩展边框” - 我添加了 panel.abline(...)在与每个条形底部大致重叠的任意位置。让我举例说明:

data <- t(data.frame(urban = 10, suburban = 6, rural = 4))#exmaple data 
barchart(d, col="orange", xlim=c(0,15),
scales=list(y=list(alternating=0)),#get rid of y-axis labels,
border = "transparent",#make bars borders transprent
par.settings = list(axis.line = list(col = "transparent")),
panel = function(x,y,...) {
panel.barchart(x,y,...)
panel.abline(h=seq(0.66, 3.66,1), col="orange", lwd=0.7)#pathetic hack
panel.axis(side=c("left"), at=1:3, half=F, ticks = F,
outside=F, labels=rownames(d))

})

这导致此条形图

enter image description here

现在,没问题,但我想制作相当多的这些条形图,所以我很可能不得不对每个 panel.abline 做一些小的调整。取决于大小、变量数量等。另外,它不是一个完美的叠加。所以我想知道是否有一些巧妙的选择来破解 border参数(目前为 transparent)或任何其他参数,以像专业人士一样在条形底部创建那些“扩展线”。请只有格子建议。

如果您还知道如何摆脱在 x=0 处垂直运行的这条灰线,那将是一个奖励。

最佳答案

您需要创建一个考虑到box.width 的自定义面板功能。你的酒吧。经过一些实验,我想出了这个,这似乎有效:

panel = function(x, y, ...) {
dots <- list(...)
br <- dots$box.ratio
panel.barchart(x, y, ...)
panel.abline(h = seq_along(x) - 0.5*(br/(br+1)), col="orange", lwd=0.7)
}

尝试一下:
d <- t(data.frame(urban = 10, suburban = 6, rural = 4, other=5))

barchart(d, col="orange", xlim=c(0, 15), box.ratio=5,
scales=list(y=list(alternating=0)),
border = "transparent",
par.settings = list(axis.line = list(col = "transparent")),
panel = function(x, y, ...) {
dots <- list(...)
br <- dots$box.ratio
panel.barchart(x, y, ...)
panel.abline(h = seq_along(x) - 0.5*(br/(br+1)), col="orange", lwd=0.7)
}
)

enter image description here

它也适用于更多数据点和不同的 box.ratio :
d <- t(data.frame(urban = 10, suburban = 6, rural = 4, other=5, rubbish=7))

barchart(d, col="orange", xlim=c(0, 15), box.ratio=9,
scales=list(y=list(alternating=0)),
border = "transparent",
par.settings = list(axis.line = list(col = "transparent")),
panel = function(x, y, ...) {
dots <- list(...)
br <- dots$box.ratio
panel.barchart(x, y, ...)
panel.abline(h = seq_along(x) - 0.5*(br/(br+1)), col="orange", lwd=0.7)
}
)

enter image description here

关于r - 自定义格子条形图中条的边框绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com