R 绘制多条线时几何图形线不一致
我试图在一个GGPlot2图形中绘制四条线。问题在于,在没有明显原因的情况下,绘制多条直线时,数据会混合 当我绘制一条直线(第4行)时,它如下所示: 但同一条线与一组线一起绘制时,看起来完全不同: 我们可以看到线型3。现在表示第4行(=第4行的形状完全不同) 由于这个问题对我来说似乎真的很困惑,我将包括代码的相关部分:R 绘制多条线时几何图形线不一致,r,ggplot2,plot,R,Ggplot2,Plot,我试图在一个GGPlot2图形中绘制四条线。问题在于,在没有明显原因的情况下,绘制多条直线时,数据会混合 当我绘制一条直线(第4行)时,它如下所示: 但同一条线与一组线一起绘制时,看起来完全不同: 我们可以看到线型3。现在表示第4行(=第4行的形状完全不同) 由于这个问题对我来说似乎真的很困惑,我将包括代码的相关部分: # a single line (number 4) plot p <- ggplot(data = mean_df, aes(x = foo)) + geom_l
# a single line (number 4) plot
p <- ggplot(data = mean_df, aes(x = foo)) +
geom_line(aes(y = .data[["4"]]), size=1.2) +
ylab("y") +
xlab("x")
print(p)
# multiple lines plot
p <- ggplot(data = mean_df, aes(x = foo)) +
geom_line(aes(y = .data[["1"]], linetype="dotted"), size=1.1) +
geom_line(aes(y = .data[["2"]], linetype="twodash"), size=1.1) +
geom_line(aes(y = .data[["3"]], linetype="longdash"), size=1.1) +
geom_line(aes(y = .data[["4"]], linetype="solid"), size=1.1) +
labs(
title="",
linetype="Z"
) +
xlab("x") +
ylab("y") +
scale_linetype_manual(name="Z", values=c("dotted", "twodash", "longdash", "solid"), labels=c("1", "2", "3", "4")) +
guides(linetype = guide_legend(override.aes = list(size = 2)))
print(p)
#单线(数字4)绘图
p您是否打算最初将列创建为列表?我以为不是这样。我将它们用作数据帧中列值的输入。无论我单独绘制col4还是和其他人一起绘制,我看不出有什么不同
此外,在绘制所有线条之前,最好使用pivot\u longer()
将数据转换为“long”格式,而不是使用geom\u line()
四次
library(tidyverse)
library(ggplot2)
mean_df <- tibble(foo = c(0.00000000, 0.06666667, 0.13333333, 0.20000000, 0.26666667, 0.33333333, 0.40000000, 0.46666667, 0.53333333, 0.60000000, 0.66666667, 0.73333333, 0.80000000, 0.86666667, 0.93333333, 1.00000000),
col1 = c(0.07158121, 0.09441034, 0.11920243, 0.14119030, 0.17993894, 0.20329103, 0.27479900, 0.44655523, 0.58079973, 0.62923797, 0.65742297, 0.68274665, 0.73551633, 0.91081992, 0.88468318, 0.91770913),
col2 = c(0.01226280, 0.09927955, 0.07809336, 0.09356798, 0.13873392, 0.21159535, 0.34069621, 0.47930396, 0.59753322, 0.64535698, 0.54105539, 0.53885464, 0.74917172, 0.91578496, 0.92687179, 0.93211675),
col3 = c(0.05849679, 0.12701451, 0.10779754, 0.12351629, 0.14365027, 0.15020727, 0.33345780, 0.48881116, 0.66081110, 0.70052420, 0.70143050, 0.65706529, 0.81447223, 0.91351115, 0.95472268, 0.94854747),
col4 = c(0.04979115, 0.08789403, 0.06288537, 0.13375946, 0.18554486, 0.19794996, 0.25361769, 0.30654542, 0.51325469, 0.50892014, 0.52454547, 0.55476019, 0.62278916, 0.84428246, 0.88896150, 0.84863063))
mean_df
# plotting column 4
ggplot(data = mean_df, aes(x = foo)) +
geom_line(aes(y = col4), size=1.2) +
ylab("y") +
xlab("x")
您是否打算最初将列创建为列表?我以为不是这样。我将它们用作数据帧中列值的输入。无论我单独绘制col4还是和其他人一起绘制,我看不出有什么不同
此外,在绘制所有线条之前,最好使用pivot\u longer()
将数据转换为“long”格式,而不是使用geom\u line()
四次
library(tidyverse)
library(ggplot2)
mean_df <- tibble(foo = c(0.00000000, 0.06666667, 0.13333333, 0.20000000, 0.26666667, 0.33333333, 0.40000000, 0.46666667, 0.53333333, 0.60000000, 0.66666667, 0.73333333, 0.80000000, 0.86666667, 0.93333333, 1.00000000),
col1 = c(0.07158121, 0.09441034, 0.11920243, 0.14119030, 0.17993894, 0.20329103, 0.27479900, 0.44655523, 0.58079973, 0.62923797, 0.65742297, 0.68274665, 0.73551633, 0.91081992, 0.88468318, 0.91770913),
col2 = c(0.01226280, 0.09927955, 0.07809336, 0.09356798, 0.13873392, 0.21159535, 0.34069621, 0.47930396, 0.59753322, 0.64535698, 0.54105539, 0.53885464, 0.74917172, 0.91578496, 0.92687179, 0.93211675),
col3 = c(0.05849679, 0.12701451, 0.10779754, 0.12351629, 0.14365027, 0.15020727, 0.33345780, 0.48881116, 0.66081110, 0.70052420, 0.70143050, 0.65706529, 0.81447223, 0.91351115, 0.95472268, 0.94854747),
col4 = c(0.04979115, 0.08789403, 0.06288537, 0.13375946, 0.18554486, 0.19794996, 0.25361769, 0.30654542, 0.51325469, 0.50892014, 0.52454547, 0.55476019, 0.62278916, 0.84428246, 0.88896150, 0.84863063))
mean_df
# plotting column 4
ggplot(data = mean_df, aes(x = foo)) +
geom_line(aes(y = col4), size=1.2) +
ylab("y") +
xlab("x")
如果您能提供一些可复制的输入数据,这将非常有帮助。一般来说,在ggplot中,当添加aes(x,y)
时,引用列名比通过索引更明智。我认为.data[[“1”]
引用的是名为“1”的列,而不是本例中的索引?无论如何,我确实将列名更改为更具描述性,但没有任何区别……我的错误是,我没有注意到双引号,但无论如何,是的,请使用描述性列名。可复制的输入数据怎么样?我添加了一些输入数据,意思是如果你能提供一些可复制的输入数据,那会有很大帮助。一般来说,在ggplot中,当添加aes(x,y)
时,引用列名比通过索引更明智。我认为.data[[“1”]
引用的是名为“1”的列,而不是本例中的索引?无论如何,我确实将列名更改为更具描述性,但没有任何区别……我的错误是,我没有注意到双引号,但无论如何,是的,请使用描述性列名。可再现的输入数据如何?我添加了一些输入数据,mean_df我在声明值为“1”、“2”、“3”和“4”的geom_线时得到了相同的结果。我没有将其转换为长格式的原因是我之前做了一些分析,并将其保留为宽格式。我想我应该重新考虑这个决定。您的实现验证了我的代码,并且一个较长的解决方案优于我的解决方案,因此感谢您。当我使用值“1”、“2”、“3”和“4”声明geom_line
线型时,我得到了相同的结果。我没有将其转换为长格式的原因是我之前做了一些分析,并将其保留为宽格式。我想我应该重新考虑这个决定。您的实现验证了我的代码,并且一个长的解决方案优于我的解决方案,因此感谢您。
# plotting all of them
mean_df %>%
pivot_longer(cols = starts_with("col"),
names_to = "Column Name",
values_to = "Column Values") %>%
ggplot(aes(x = foo)) +
geom_line(aes(y = `Column Values`,
col = `Column Name`), size=1.2) +
scale_color_manual(values = c("Grey","Grey","Grey","Black"))