在 R 中绘制线条时出错
Error when plotting lines in R
我试图在 R 上绘制一些线条,但它交换了线条。也许这是我做错了什么。如果有人可以帮助我。
我拥有的数据框是:
df_sel2 <- read.table(text="knn_sel2 tam_tab
V11 3.500000 8
V12 3.740000 64
V13 7.111667 512
V14 25.361667 4096
V15 195.018333 32768", header=TRUE)
df_sel4 <- read.table(text="knn_sel4 tam_tab
V11 3.535000 8
V12 3.811667 64
V13 7.193333 512
V14 26.151667 4096
V15 203.636667 32768", header=TRUE)
df_sel8 <- read.table(text="knn_sel8 tam_tab
V11 3.961667 8
V12 4.055000 64
V13 7.538333 512
V14 27.288333 4096
V15 209.646667 32768", header=TRUE)
df_sel32 <- read.table(text="knn_sel32 tam_tab
V11 3.750000 8
V12 5.040000 64
V13 8.581667 512
V14 30.103333 4096
V15 225.441667 32768", header=TRUE)
正在通过此代码绘制图表:
qplot(tam_tab,knn_sel2,data=df_sel2, linetype="2",geom="line") +
geom_line(mapping=aes(tam_tab,knn_sel4,linetype="4"),data=df_sel4) +
geom_line(mapping=aes(tam_tab,knn_sel8,linetype="8"),data=df_sel8) +
geom_line(mapping=aes(tam_tab,knn_sel32,linetype="32"),data=df_sel32) +
scale_linetype_manual("Valor da Seletividade",
values=c("solid","dotted","dashed","dotdash"),
labels=c("2","4", "8","32")) +
labs( x ="Tamanho da tabela interna", y = "tempo (s)")
我得到的结果是这样的:
可以看出,标签“4”位于“32”的位置。
为什么会这样?
提前致谢!
问题出在您的 labels=
争论上。这是为了重命名级别。如果你想指定顺序,你需要指定breaks=
。使用
scale_linetype_manual("Valor da Seletividade",
values=c("solid","dotted","dashed","dotdash"),
breaks=c("2","4", "8","32"))
当然,使用ggplot 更友好的方法是将所有数据合并到一个数据框中。这是一种方法
library(dplyr)
sels <- c(2,4,8,32)
mydata <- mget(paste0("df_sel", sels)) %>%
Map(data.frame, ., sel=sels) %>%
Map(function(x) setNames(x, c("knn","tam_tab", "sel")), .) %>%
bind_rows() %>%
mutate(sel=factor(sel, sels))
那么你的绘图代码就变得更简单了
ggplot(mydata, aes(tam_tab , knn, linetype=sel)) + geom_line()
我试图在 R 上绘制一些线条,但它交换了线条。也许这是我做错了什么。如果有人可以帮助我。
我拥有的数据框是:
df_sel2 <- read.table(text="knn_sel2 tam_tab
V11 3.500000 8
V12 3.740000 64
V13 7.111667 512
V14 25.361667 4096
V15 195.018333 32768", header=TRUE)
df_sel4 <- read.table(text="knn_sel4 tam_tab
V11 3.535000 8
V12 3.811667 64
V13 7.193333 512
V14 26.151667 4096
V15 203.636667 32768", header=TRUE)
df_sel8 <- read.table(text="knn_sel8 tam_tab
V11 3.961667 8
V12 4.055000 64
V13 7.538333 512
V14 27.288333 4096
V15 209.646667 32768", header=TRUE)
df_sel32 <- read.table(text="knn_sel32 tam_tab
V11 3.750000 8
V12 5.040000 64
V13 8.581667 512
V14 30.103333 4096
V15 225.441667 32768", header=TRUE)
正在通过此代码绘制图表:
qplot(tam_tab,knn_sel2,data=df_sel2, linetype="2",geom="line") +
geom_line(mapping=aes(tam_tab,knn_sel4,linetype="4"),data=df_sel4) +
geom_line(mapping=aes(tam_tab,knn_sel8,linetype="8"),data=df_sel8) +
geom_line(mapping=aes(tam_tab,knn_sel32,linetype="32"),data=df_sel32) +
scale_linetype_manual("Valor da Seletividade",
values=c("solid","dotted","dashed","dotdash"),
labels=c("2","4", "8","32")) +
labs( x ="Tamanho da tabela interna", y = "tempo (s)")
我得到的结果是这样的:
可以看出,标签“4”位于“32”的位置。 为什么会这样?
提前致谢!
问题出在您的 labels=
争论上。这是为了重命名级别。如果你想指定顺序,你需要指定breaks=
。使用
scale_linetype_manual("Valor da Seletividade",
values=c("solid","dotted","dashed","dotdash"),
breaks=c("2","4", "8","32"))
当然,使用ggplot 更友好的方法是将所有数据合并到一个数据框中。这是一种方法
library(dplyr)
sels <- c(2,4,8,32)
mydata <- mget(paste0("df_sel", sels)) %>%
Map(data.frame, ., sel=sels) %>%
Map(function(x) setNames(x, c("knn","tam_tab", "sel")), .) %>%
bind_rows() %>%
mutate(sel=factor(sel, sels))
那么你的绘图代码就变得更简单了
ggplot(mydata, aes(tam_tab , knn, linetype=sel)) + geom_line()