ggplot2 的 geom_line 中线的大小不同

Posted

技术标签:

【中文标题】ggplot2 的 geom_line 中线的大小不同【英文标题】:Different size for lines in ggplot2's geom_line 【发布时间】:2015-12-25 17:45:43 【问题描述】:

是否可以使用geom_line 绘制不同大小(即粗)的线?

所有行的大小参数都相同,与组无关:

bp <- ggplot(data=diamonds, aes(x=cut, y=depth)) +
  geom_line(aes(color=cut), size=1)

但是,我希望线条的粗细能够反映它们以观察次数衡量的相对重要性:

relative_size <- table(diamonds$cut)/nrow(diamonds)
bp <- ggplot(data=diamonds, aes(x=cut, y=depth)) +
  geom_line(aes(color=cut), size=cut)
bp
# Error: Incompatible lengths for set aesthetics: size

有趣的是,geom_line(..., size=cut) 可以正常工作,但效果不如预期,因为它根本不会改变行的大小。

【问题讨论】:

你可以把size=....放在aes里面。 @Heroka,你想提供一个我可以接受的答案吗? @MERose LyzanderR 已经提供了答案,您可以接受。 这不一样,而且要复杂得多。 好吧,@LyzanderR 给出的答案正是您所要求的(“反映相对重要性的厚度”)。无论如何,我的建议并不保证一个独立的答案。 【参考方案1】:

为此,您需要为relative_size 创建一个与data.frame 的行长度相同的新变量,并将其添加到您的data.frame。为了做到这一点,你可以这样做:

#convert relative_size to a data.frame
diams <- diamonds
relative_size <- as.data.frame(table(diamonds$cut)/nrow(diamonds))

#merge it to the diams data.frame so that it has the same length
diams <- merge(diams, relative_size, by.x='cut', by.y='Var1', all.x=TRUE)

注意上面可以用dplyr的代码替换:

diamonds %>% group_by(cut) %>% mutate(size = length(cut) / nrow(diamonds))

然后您需要遵循 @Heroka 的建议,并在您的 diams data.frame 中使用新创建的列在 aes 中使用 size:

bp <- ggplot(data=diams, aes(x=cut, y=depth)) +
  geom_line(aes(color=cut, size=Freq))
bp

它有效:

【讨论】:

添加了一些dplyr 代码,简化了您对tablemerge 的调用。 Freq 在哪里初始化? @Kulluk007 是relative_size中的专栏。如果您在控制台上输入as.data.frame.table,您将看到该函数创建了一个 data.frame 并将名称 Freq 赋予第二列。

以上是关于ggplot2 的 geom_line 中线的大小不同的主要内容,如果未能解决你的问题,请参考以下文章

R - geom_line ggplot2中的手动图例颜色

R语言ggplot2可视化:使用geom_line函数可视化折线图并自定义设置折线图的不同区间使用不同颜色

R语言ggplot2可视化多变量组合(interaction,group=interaction())分组下的线图(geom_line)和箱图(geom_boxplot)实战

R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图并对哑铃图进行排序(reorder dumbbell plot)

R语言ggplot2可视化:自定义不同颜色的线条互相覆盖的次序按照需要的覆盖次序自定义geom_line函数的次序(Change the overlaying order of lines)

R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)添加标题副标题