спасибо баптист за ваш ответ и решение.
Я думаю, что нашел еще один хороший способ сделать это с помощью gtable и сетки:
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)
но теперь мой вопрос: как я могу сделать такой же фон для графика сюжета с той же высотой из элементов - gtable?
как этот Пример: результаты анализа
спасибо,
person
Tlopasha
schedule
08.09.2017