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
代码,简化了您对table
和merge
的调用。
Freq
在哪里初始化?
@Kulluk007 是relative_size
中的专栏。如果您在控制台上输入as.data.frame.table
,您将看到该函数创建了一个 data.frame 并将名称 Freq 赋予第二列。以上是关于ggplot2 的 geom_line 中线的大小不同的主要内容,如果未能解决你的问题,请参考以下文章
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)添加标题副标题