绘制具有部分通用图例的多个片段
Plot several segments with a partially common legend
假设我有以下数据框:
line_df <- data.frame(x_ini = c(0.55,2.55,1.55,5.55,7.55),
x_end = c(1.45,3.45,2.45,6.45,8.45),
y = c(-0.5,-0.5,-1.5,-2.5,-2.5),
category = c("red","red","blue","green","green"))
我想为数据框的每一行绘制一个水平线段。线段定义如下:(x_ini[i],y[i])
和 (x_end[i],y[i])
以及线段的颜色 line_df$category
.
我试过 geom_segment
、segments
、abline
和 lines
,但我无法正确设置图例并用相同的图例绘制线段说明,因为我还有其他数据要包含在同一图上。
关于如何执行此操作的任何建议?很高兴将数据框修改为其他更合适的结构,但我想避免为每个段多次调用相同的指令。
谢谢!
编辑
我想包括的其他数据如下。
previous_df <- data.frame(letter=c("x","y","y","z","x","p"),number=c(9,3,2,1,5,7),labeldf=c(1,15,12,15,1,12))
ggplot(previous_df,aes(labeldf,number,fill=letter)) +
geom_bar(stat="identity",position='dodge')
所以问题是我无法向其添加另一个 ggplot
层,如果我直接添加 geom_segment
(在 Nova 的回答中提到),我会收到关于 fill
选项。
我认为如果您为 "row" 添加一个字段就可以做到 - 这是您的意思吗?
line_df$row <- seq_len(nrow(line_df))
ggplot(line_df) +
geom_segment(aes(x = x_ini, xend = x_end, y = y, yend = y,
group = row, color = category), size = 2) +
scale_color_manual(values = c("lightblue", "seagreen", "firebrick"))
如果你想从另一个数据框中添加数据,你可以这样做:
ggplot(previous_df) +
geom_bar(aes(labeldf, number, fill=letter), stat="identity",position='dodge') +
geom_segment(data = line_df, aes(x = x_ini, xend = x_end, y = y, yend = y,
group = row, color = category), size = 2) +
scale_color_manual(values = c("lightblue", "seagreen", "firebrick"))
假设我有以下数据框:
line_df <- data.frame(x_ini = c(0.55,2.55,1.55,5.55,7.55),
x_end = c(1.45,3.45,2.45,6.45,8.45),
y = c(-0.5,-0.5,-1.5,-2.5,-2.5),
category = c("red","red","blue","green","green"))
我想为数据框的每一行绘制一个水平线段。线段定义如下:(x_ini[i],y[i])
和 (x_end[i],y[i])
以及线段的颜色 line_df$category
.
我试过 geom_segment
、segments
、abline
和 lines
,但我无法正确设置图例并用相同的图例绘制线段说明,因为我还有其他数据要包含在同一图上。
关于如何执行此操作的任何建议?很高兴将数据框修改为其他更合适的结构,但我想避免为每个段多次调用相同的指令。
谢谢!
编辑
我想包括的其他数据如下。
previous_df <- data.frame(letter=c("x","y","y","z","x","p"),number=c(9,3,2,1,5,7),labeldf=c(1,15,12,15,1,12))
ggplot(previous_df,aes(labeldf,number,fill=letter)) +
geom_bar(stat="identity",position='dodge')
所以问题是我无法向其添加另一个 ggplot
层,如果我直接添加 geom_segment
(在 Nova 的回答中提到),我会收到关于 fill
选项。
我认为如果您为 "row" 添加一个字段就可以做到 - 这是您的意思吗?
line_df$row <- seq_len(nrow(line_df))
ggplot(line_df) +
geom_segment(aes(x = x_ini, xend = x_end, y = y, yend = y,
group = row, color = category), size = 2) +
scale_color_manual(values = c("lightblue", "seagreen", "firebrick"))
如果你想从另一个数据框中添加数据,你可以这样做:
ggplot(previous_df) +
geom_bar(aes(labeldf, number, fill=letter), stat="identity",position='dodge') +
geom_segment(data = line_df, aes(x = x_ini, xend = x_end, y = y, yend = y,
group = row, color = category), size = 2) +
scale_color_manual(values = c("lightblue", "seagreen", "firebrick"))