R 自定义晶格条形图中条形图的边框图形
在我绝望地试图发表一篇论文的过程中,我试图从一个简单的数据中制作出一幅奇特的信息图表,但毫无结果,希望用一幅吸引人的图片来吸引评论家。作为一种选择,我正在制作条形图,每个条形图的底部都有一条延长线,类似于由创建的条形图 因此,总体而言,进展顺利。但是我使用了一个非常便宜的技巧在每个条的底部创建那些“扩展边框”——我在与每个条的底部大致重叠的任意位置添加R 自定义晶格条形图中条形图的边框图形,r,panel,bar-chart,data-visualization,lattice,R,Panel,Bar Chart,Data Visualization,Lattice,在我绝望地试图发表一篇论文的过程中,我试图从一个简单的数据中制作出一幅奇特的信息图表,但毫无结果,希望用一幅吸引人的图片来吸引评论家。作为一种选择,我正在制作条形图,每个条形图的底部都有一条延长线,类似于由创建的条形图 因此,总体而言,进展顺利。但是我使用了一个非常便宜的技巧在每个条的底部创建那些“扩展边框”——我在与每个条的底部大致重叠的任意位置添加panel.abline(…)。让我举例说明: data <- t(data.frame(urban = 10, suburban = 6,
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))
})
data您需要创建一个自定义面板函数,该函数考虑了条的框宽度。经过一些实验后,我想出了一个似乎有效的方法:
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)
}
就这些,正是我需要的,谢谢@Andrie!PS:你知道如何去掉条形图左侧的灰色垂直线吗?@GeekOnAcid我对使用格子一无所知!刚刚弄明白-需要将reference.line=list(col=“transparent”)
添加到par.settings的列表中。
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)
}
)
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)
}
)