thank you baptiste for your answer and solution.
I think i found maybe another good way to do that with gtable & grid:
data <- structure(list(item = c("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
"Integer vitae libero ac risus egestas placerat.", "Fusce lobortis lorem at ipsum semper sagittis.",
"Donec quis dui at dolor tempor interdum.", "Vivamus molestie gravida turpis.",
"Nunc dignissim risus id metus.", "Praesent placerat risus quis eros.",
"Vestibulum commodo felis quis tortor."), VG = c(5, 6, 5, 3,
3, 5, 5, 5), MA = c(5.7, 5.9, 5.7, 5.7, 3.7, 5.7, 5.7, 5.7),
KO = c(3.3, 4.3, 3.7, 2.3, 3.3, 3.3, 3.3, 3.3), KU = c(5.8,
3.8, 2.8, 2.8, 3.8, 5.8, 5.8, 5.8), SE = c(6, 4, 4, 3.5,
3, 6, 6, 6), itemnummber = 1:8, prio = c("", "2X", "", "",
"4X", "1X", "", "")), .Names = c("item", "VG", "MA", "KO",
"KU", "SE", "itemnummber", "prio"), row.names = c(NA, -8L), spec =
structure(list(cols = structure(list(item = structure(list(), class = c("collector_character","collector")), VG = structure(list(), class = c("collector_double",
"collector")), MA = structure(list(), class = c("collector_double",
"collector")), KO = structure(list(), class = c("collector_double",
"collector")), KU = structure(list(), class = c("collector_double",
"collector")), SE = structure(list(), class = c("collector_number",
"collector"))), .Names = c("item", "VG", "MA", "KO", "KU",
"SE")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"), class =
c("tbl_df",
"tbl", "data.frame"))
library(tidyr)
data_long <- gather(data, perspective, value, VG:SE, factor_key=TRUE)
library(ggplot2)
library(stringr)
library(grid)
library(gridExtra)
library(gtable)
scale.text <- c("not satisfied", "little satisfied", "satisfied", "50%
ok", "more than 50%", "sehr satisfied", " 100% satisfied")
diagram <- ggplot(data_long, aes(value, item, colour = perspective, fill =
perspective, group = perspective)) +
geom_point(size= 5,stroke = 0.1) +
scale_y_discrete(labels = function(x) str_wrap(x, width = 60)) +
scale_x_continuous(breaks = c(1:7), labels = scale.text, limits=c(1,
7),sec.axis = sec_axis(~ ., breaks = c(1:7), labels = c(1:7))) +
theme_minimal(base_size = 5) +
theme(
panel.grid.minor.x = element_blank(),
panel.grid.major.x =element_line(linetype="dotted",colour = "#b4c2cb",
size = 0.2),
legend.position="top",
plot.title = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.text.x=element_text(color = "black", size=8, angle=60, vjust=.8,
hjust=0.8),
axis.text.x.top = element_text(color = "black", size=8, angle=0,
vjust=.5, hjust=0.5)
)
# ITEMS
tt3 <- ttheme_minimal(
core=list(bg_params = list(fill = c("#DDDDDD", "#FFFFFF"), col=NA),
fg_params=list(fontface=3)),
base_size = 9,
colhead=list(fg_params=list(col="navyblue", fontface=1)),
rowhead=list(fg_params=list(col="orange", fontface=1)))
items <- tableGrob(str_wrap(data$item, width = 80),cols = " ", theme=tt3)
items$widths <- unit(rep(1, 1), "npc")
#items$heights <- unit(rep(1/nrow(data), nrow(data)), "null")
items$heights <- unit(c(0.03, rep(1/nrow(data) , nrow(data))), "npc")
# stats
stats <- tableGrob(data[,2:4], rows=NULL, theme=tt3)
stats$widths <- unit(rep(1/3,3), "npc")
stats$heights <- unit(c(0.03, rep(1/nrow(data) , nrow(data))), "npc")
separators <- replicate(ncol(stats), segmentsGrob(x1 = unit(0, "npc"),
gp=gpar(lty=4, col = "#8c8c8c")), simplify=FALSE)
stats <- gtable_add_grob(stats, grobs = separators,t = 1, b = nrow(stats), l = seq_len(ncol(stats)))
# itemnummber
itemnummber <- tableGrob(data$itemnummber,cols = "Nr.", rows=NULL,
theme=tt3)
itemnummber$widths <- unit(rep(1, 1), "npc")
itemnummber$heights <- unit(c(0.03, rep(1/nrow(data) , nrow(data))),"npc")
prioritaeten <- tableGrob(data$prio,cols = "Prio.", theme=tt3)
prioritaeten$widths <- unit(rep(1, 1), "npc")
#items$heights <- unit(rep(1/nrow(data), nrow(data)), "null")
prioritaeten$heights <- unit(c(0.03, rep(1/nrow(data) , nrow(data))),"npc")
separators <- replicate(ncol(prioritaeten),
segmentsGrob(x1 = unit(0, "npc"), gp=gpar(lty=4, col="#8c8c8c")),simplify=FALSE)
prioritaeten <- gtable_add_grob(prioritaeten, grobs = separators,
t = 1, b = nrow(prioritaeten), l = seq_len(ncol(prioritaeten)))
new.grob <- ggplotGrob(diagram)
new.grob <- gtable_add_cols(new.grob, unit(1, "cm"), pos = 0)
new.grob <- gtable_add_cols(new.grob, unit(12, "cm"), pos = 0)
new.grob <- gtable_add_cols(new.grob, unit(1, "cm"), pos = 0)
new.grob <- gtable_add_cols(new.grob, unit(2.5, "cm"), pos = -1)
new.grob <- gtable_add_grob(new.grob, itemnummber, t=8, l=1, b=8, r=1, name="itemnummber")
new.grob <- gtable_add_grob(new.grob, items, t=8, l=2, b=8, r=2, name="items")
new.grob <- gtable_add_grob(new.grob, prioritaeten, t=8, l=3, b=8, r=3, name="prioritaeten")
new.grob <- gtable_add_grob(new.grob, stats, t=8, l=11, b=8, r=11, name="stats")
separators <- replicate(ncol(new.grob),
segmentsGrob(x1 = unit(0, "npc"), gp=gpar(lty=4, col = "#8c8c8c")),
simplify=FALSE)
new.grob <- gtable_add_grob(new.grob, grobs = separators, t = 8, b = 8, l = 4)
grid.newpage()
grid.draw(new.grob)
but now my question is how i can do the same background for the plot graphic with the same height from items - gtable ?
like this Example : optimal-efficient-plotting-of-survival-regression-analysis-results
thanks,