我一直试图用不同的点符号和使用R
包{{连接不同颜色的线来绘制两组数据的图表。 1}},但是对于我的生活,我无法通过显示每条曲线的相关数据点符号来正确区分两条曲线
我可以让图例显示不同的行颜色。但我无法使图例为每组数据显示不同的数据点符号。
以下代码:
ggplot2
输出此图表:
但图例中的数据点符号不可区分。图例显示两个图形的相同符号(由两个数据点符号组成)。
一种可能的解决方案是将线程数定义为df <- data.frame( thrd_cnt=c(1,2,4,8,16),
runtime4=c(53,38,31,41,54),
runtime8=c(54,35,31,35,44))
library("ggplot2")
print(
ggplot(data = df, aes(df$thrd_cnt, y=df$runtime, color=)) +
geom_line(aes(y=df$runtime4, color = "4 cores")) +
geom_point(aes(y=df$runtime4, color = "4 cores"), fill = "white",
size = 3, shape = 21) +
geom_line(aes(y=df$runtime8, color = "8 cores")) +
geom_point(aes(y=df$runtime8, color = "8 cores"), fill = "white",
size = 3, shape = 23) +
xlab("Number of Threads") +
ylab(substitute(paste("Execution Time, ", italic(milisec)))) +
scale_x_continuous(breaks=c(1,2,4,8,16)) +
theme(legend.position = c(0.3, 0.8)) +
labs(color="# cores")
)
## save a pdf and a png
ggsave("runtime.pdf", width=5, height=3.5)
ggsave("runtime.png", width=5, height=3.5)
,然后我可以在图例右侧获取数据点符号,但我仍然不知道如何做到这一点。 / p>
任何帮助都将不胜感激。
答案 0 :(得分:0)
收集到“长”格式的数据框后,将颜色和形状(pch)传递给美学论点:
library(tidyverse)
df <- data.frame( thrd_cnt=c(1,2,4,8,16),
runtime4=c(53,38,31,41,54),
runtime8=c(54,35,31,35,44))
df %>% gather(key=run, value=time, -thrd_cnt) %>%
ggplot(aes(thrd_cnt, time, pch=run, colour=run)) + geom_line() + geom_point()
(注意代码与原始帖子相比有多简短)
答案 1 :(得分:0)
或shape
也很好,如果你用df做更多的东西,可能有意义转换并保持长,'整洁'格式。
library("ggplot2")
df <- data.frame( thrd_cnt=c(1,2,4,8,16),
runtime4=c(53,38,31,41,54),
runtime8=c(54,35,31,35,44))
df <- df %>% gather("runtime", "millisec", 2:3)
ggplot(data = df, aes(x = thrd_cnt, y = millisec, color = runtime, shape =
runtime)) + geom_line() + geom_point()
答案 2 :(得分:0)
如上所述,您需要将gather
数据转换为长格式,以便将cores
变量映射到颜色和形状。要保持与原始图表中相同的形状和填充选项,请使用scale_shape_manual
设置与cores
的每个级别对应的形状。请注意,您需要在colour
中为shape
和labs()
图例设置名称,以确保它们重合并且不会生成两个图例。我还使用了mutate
,因此cores
的级别不会混淆地包含runtime
这个词。
df <- data.frame( thrd_cnt=c(1,2,4,8,16),
runtime4=c(53,38,31,41,54),
runtime8=c(54,35,31,35,44))
library(tidyverse)
ggplot(
data = df %>%
gather(cores, runtime, runtime4, runtime8) %>%
mutate(cores = str_c(str_extract(cores, "\\d"), " cores")),
mapping = aes(x = thrd_cnt, y = runtime, colour = cores)
) +
geom_line() +
geom_point(aes(shape = cores), size = 3, fill = "white") +
scale_x_continuous(breaks = c(1, 2, 4, 8, 16)) +
scale_shape_manual(values = c("4 cores" = 21, "8 cores" = 23)) +
theme(legend.position = c(0.3, 0.8)) +
labs(
x = "Number of Threads",
y = "Execution Time (millisec)",
colour = "# cores",
shape = "# cores"
)
由reprex package(v0.2.0)创建于2018-04-10。