我希望复制这篇文章中看到的第一个情节的设计:
http://stats.blogoverflow.com/2011/12/andyw-says-small-multiples-are-the-most-underused-data-visualization/
这是从1,但在那本书中没有代码显示的数字。
链接中的这个数字没有图例,而是显示标签' in‘、'MO’等等。以交错的方式放置在各自代表的直线的高度上。我知道如何使用ggplot2制作绘图,但我遇到的具体问题是编写代码,使图形右侧的标签像这样。有人能示范一下怎么做吗?
卡尔,丹尼尔和琳达·皮克尔。2009年。用微地图可视化数据模式。波卡·罗坦,佛罗里达州CRC出版社
发布于 2017-03-09 03:34:53
您可以将geom_label与nudge_x参数一起使用,如下所示:
library(data.table) # I always use data.table but not required
library(ggplot2)
a <- c(1:10)
b <- c(seq(1,20,2))
c <- c(seq(1,30,3))
d <- c(1:10)
aa <- data.table(a,b,c,d)
ggplot(aa)+
geom_line(aes(a,b))+
geom_line(aes(a,c))+
geom_line(aes(a,d))+
geom_label(aes(10,10), label = "line 1", nudge_x = 1)+
geom_label(aes(10,19), label = "line 2", nudge_x = 1)+
geom_label(aes(10,29), label = "line 3", nudge_x = 1)您可以直接输入与所需的标签位置相对应的顺序对。情节如下:

发布于 2017-03-09 23:11:46
这不是一项容易的任务,尤其是以编程的方式执行。它涉及到使用grobs,没有什么困难,但通常在成品上手工完成,而不是按过程生成。
数据
df <- read.table(text = 'Samples Day.1 Day.2 Day.3 Day.4
Seradigma335 1.2875 1.350 1.850 1.6125
Seradigma322 0.9375 2.400 1.487 1.8125
Sigma 1.1250 1.962 1.237 2.0500
Shapiro_red 0.7750 1.575 1.362 1.0125
Shapiro_w/red 0.7750 1.837 0.975 0.8250', header = T)(取自这里的另一个问题)
代码
library(tidyr)
library(ggplot2)
tidy_df <- df %>%
gather('Day','Value', -Samples)简单地块
g <- ggplot(tidy_df) +
geom_line(aes(Day, Value, group = Samples), show.legend = F) +
scale_x_discrete(expand = c(.02,0)) +
scale_y_continuous(limits = c(0,3)) +
theme_grey() +
theme(plot.margin = unit(c(0,.2,0,0), 'npc'),
panel.border = element_rect(color = 'black', fill = NA),
axis.ticks = element_blank()
)

注意右边的边距(用plot.margin = unit(c(0,.2,0,0), 'npc')设置)
标签
library(cowplot)
g <- g +
draw_label(label = df$Samples[1], x = 4.1, y = df$Day.4[1], hjust = 0) +
draw_label(label = df$Samples[2], x = 4.1, y = df$Day.4[2], hjust = 0) +
draw_label(label = df$Samples[3], x = 4.1, y = df$Day.4[3], hjust = 0) +
draw_label(label = df$Samples[4], x = 4.1, y = df$Day.4[4], hjust = 0) +
draw_label(label = df$Samples[5], x = 4.1, y = df$Day.4[5], hjust = 0)我们将标签直接添加到绘图中(与grob相反,请参阅文档),其x为4.1,因此它实际上就在面板外(Day.4的x为4),并由边距(称为裁剪)覆盖。
移除裁剪
# transform to grob
gt <- ggplotGrob(g)
# set panel's clipping to off
gt$layout$clip[gt$layout$name == "panel"] <- "off"
# draw the grob
ggdraw(gt)

备注
我们可以使用for loop来加速标签的创建:
for (i in 1:nrow(df)) {
g <- g + draw_label(label = df$Samples[i], x = 4.1, y = df$Day.4[i], hjust = 0)
}但是,我们不能像我们习惯美学那样,真正地映射到vars。
正如我在一开始所说的,这些方法需要相当多的工作才能找到正确的平衡和定位,这当然不能被认为是一个快速的情节,但如果要发布一些东西,它可能是值得的。
https://stackoverflow.com/questions/42685922
复制相似问题