gpt4 book ai didi

r - 使用ggplot2的表头

转载 作者:行者123 更新时间:2023-12-04 04:38:37 25 4
gpt4 key购买 nike

我想复制在ggplot2中的LaTeX/pgf中完成的组合表/图。

这是原始表/图:

这是我使用ggplot2的距离:

仍然存在一些小问题(?),但是我的主要问题是:如何添加表头?

它应该与元素正确对齐。

理想情况下,它也可以像原始示例中那样使用水平线来模仿书签的外观。

有任何想法吗?

这是我到目前为止使用的代码:

tmptable <-
data.frame(Method=c("label", "svlabel", "libor", "rpirat", "Frankfurt", "high"),
p=c(0.03, 0.38, 0.27, 0.31, 0.05, 0.36),
p_lo=c(-0.05, 0.34, 0.21, 0.24, -0.03, 0.32),
p_hi=c(0.11, 0.41, 0.33, 0.38, 0.13, 0.41))
plotPointsCIinMatrix(tmptable)

具有此功能:
plotPointsCIinMatrix <- function(data,
cols=NULL,
.label=1,
.point_estimate=2,
.ci_lo=3,
.ci_hi=4,
.digits=2) {
if (!require("ggplot2"))
stop("Need package 'ggplot2'")
if (!require("reshape"))
stop("Need package 'reshape'")
if (!require("gridExtra"))
stop("Need package 'gridExtra'")

## keep the order
data[,.label] <- factor(data[,.label], levels=rev(unique(data[,.label])))

## reshape data for table plotting
table_df <- data.frame(label=data[,.label],
point_estimate=data[,.point_estimate],
ci=paste0("[",
data[,.ci_lo],
"; ",
data[,.ci_hi],
"]"))
table_df_melted <- melt(table_df, id.vars = "label")

## plot the table (part 1)
plot_table <-
ggplot(table_df_melted, aes(y=label, x=variable)) +
geom_text(aes(label=value)) +
scale_x_discrete("", labels="", expand=c(0.4,0)) +
theme_minimal() +
theme(panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
axis.text.y=element_blank(),
plot.margin=unit(c(1,1,0.5,0), "lines"),
panel.margin=unit(0, "cm"))

## plot the ci-plot (part 2)
plotname_point_estimate <- colnames(data[,.point_estimate, drop=FALSE])
plotname_label <- colnames(data[,.label, drop=FALSE])
plotname_ci_lo <- colnames(data[,.ci_lo, drop=FALSE])
plotname_ci_hi <- colnames(data[,.ci_hi, drop=FALSE])
plot_ci <-
ggplot(data,
aes_string(x=plotname_point_estimate, y=plotname_label)) +
geom_segment(aes_string(x=plotname_ci_lo,
xend=plotname_ci_hi,
yend=plotname_label),
colour="grey70",
lwd=0.5,
leneend="round",
arrow=arrow(angle=90, ends="both", length = unit(0.15, "cm"))) +
geom_point(aes_string(colour=plotname_label), size=4) +
(if (is.null(cols)) {
scale_color_discrete(guide=FALSE)
} else {
scale_color_manual(guide=FALSE, values=cols)
}) +
expand_limits(x=1) +
geom_vline(aes(x=0), lty="dashed", lwd=0.9, colour="grey70") +
theme_minimal() +
theme(axis.title.y=element_blank(),
axis.title.x=element_blank(),
axis.ticks=element_blank(),
axis.text.y=element_text(size=15, hjust=0),
plot.margin=unit(c(1,0,0.5,0.5), "lines"))

gp <- ggplot_gtable(ggplot_build(plot_ci))
gdata.table <- ggplot_gtable(ggplot_build(plot_table))
maxHeight = grid::unit.pmax(gp$heights[2:3], gdata.table$heights[2:3])
gp$heights[2:3] <- as.list(maxHeight)
gdata.table$heights[2:3] <- as.list(maxHeight)
library("gridExtra")
a <- arrangeGrob(gp, gdata.table,
##clip = FALSE,
ncol = 2,
widths = unit(c(10,5),
c("null", "null")))

a
}

最佳答案

您可以通过添加选项main = "Put your title here!"来添加表格标题

我知道这并不是您要找的东西,但是您可以在arrangeGrob框架中工作。另一种方法是在LaTeX中制作表格标题并将图形与之完美对齐。

这是我更改的功能的一部分:

... previous code in plotPointsCIinMatrix()

library("gridExtra")
a <- arrangeGrob(gp, gdata.table,
##clip = FALSE,
ncol = 2,
widths = unit(c(10,5),
c("null", "null")),
main = "Put your title here!")

a
}

关于r - 使用ggplot2的表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846058/

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