Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 绘制多条线时几何图形线不一致_R_Ggplot2_Plot - Fatal编程技术网

R 绘制多条线时几何图形线不一致

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

我试图在一个GGPlot2图形中绘制四条线。问题在于,在没有明显原因的情况下,绘制多条直线时,数据会混合

当我绘制一条直线(第4行)时,它如下所示:

但同一条线与一组线一起绘制时,看起来完全不同:

我们可以看到线型3。现在表示第4行(=第4行的形状完全不同)

由于这个问题对我来说似乎真的很困惑,我将包括代码的相关部分:

# 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"))