【发布时间】:2018-07-02 17:42:07
【问题描述】:
我正在尝试在 ggplot 中绘制具有分组变量的多个数据集,但遇到了一些问题。好的,所以我有两个数据集:
df.1 <- data.frame(
name = c( "a", "b", "c", "d" ),
x = c( 3, 2, 1, 2 ),
y = c( 4, 3, 4, 3 ),
z = c( 8, 9, 6, 7 ) )
df.2 <- data.frame(
name = c( "o", "p", "q", "r" ),
x = c( 8, 7, 6, 9 ),
y = c( 4, 1, 4, 3 ),
z = c( 1, 2, 2, 2 ) )
然后我将它们中的每一个按名称分组
df.1.melted <- melt( df.1, id.vars = "name" )
df.2.melted <- melt( df.2, id.vars = "name" )
现在,我想要一个图,其中 x 轴有 x、y 和 z 分组,y 轴是值,每个样本都由 name 链接给它.我可以为其中一个数据集执行此操作(我最终想要一个对数刻度,因此包含在内):
ggplot( df.1.melted, aes( x = variable,
y = value,
group = df.1.melted$name,
col = df.1.melted$name ) ) +
scale_y_continuous( trans = log_trans(), limits = c( 1, 10 ),
breaks = c( 1, 10 ) ) +
labs( x = "", y = "value" ) +
geom_point( size = 4 ) +
geom_line( size = 1 )
然后我可以通过以下方式添加第二个数据集:
ggplot( df.1.melted, aes( x = variable,
y = value,
group = df.1.melted$name,
col = df.1.melted$name ) ) +
scale_y_continuous( trans = log_trans(), limits = c( 1, 10 ),
breaks = c( 1, 10 ) ) +
labs( x = "", y = "value" ) +
geom_point( size = 4 ) +
geom_line( size = 1 ) +
geom_point( data = df.2.melted, aes( x = df.2.melted$variable,
y = df.2.melted$value,
group = df.2.melted$name,
col = df.2.melted$name ),
size = 4 ) +
geom_line( data = df.2.melted, aes( x = df.2.melted$variable,
y = df.2.melted$value,
group = df.2.melted$name,
col = df.2.melted$name ),
size = 1 )
这是我所追求的主题,但我遇到了一些问题:
1) 使用aes( group = ...) 部分时如何覆盖默认配色方案?我想在数据框中有预定义的颜色,或者能够在geom_point() 中定义它们。颜色应该特定于我正在使用的数据框,所以df.1.melted 是darkgreen 和df.2.melted 是orange 或类似的东西。我还没有找到如何在不使用group = 调用aes() 的情况下绘制这些图,所以我目前找不到解决方法。
该解决方案看起来可行,如此处答案中的ggplot 示例:
R plotly - Plotting grouped lines
但是,我对dplyr 不够熟悉,无法弄清楚创建这个情节的原因。
感谢您的建议
【问题讨论】:
-
scale_colour_manual 让您手动分配颜色