如何根据R中的X值在两个Y轴上绘图?

如何根据R中的X值在两个Y轴上绘图?,r,R,这是我的问题,我有这样的数据 A B C D a 24 1 2 3 b 26 2 3 1 c 25 3 1 2 现在我想在一个图中,在一个Y轴(0到30)上绘制A,在另一个Y轴(0到5)上绘制B~D。另外,我希望a、b、c行有一条线将它们链接在一起(假设a、b、c代表鼠标ID)。有谁能想出办法来做这件事吗?我更喜欢使用R。提前谢谢 # create some data data = as.data.frame(list(A = c(24,26,25),

这是我的问题,我有这样的数据

  A B C D 

a 24 1 2 3 

b 26 2 3 1

c 25 3 1 2
现在我想在一个图中,在一个Y轴(0到30)上绘制A,在另一个Y轴(0到5)上绘制B~D。另外,我希望a、b、c行有一条线将它们链接在一起(假设a、b、c代表鼠标ID)。有谁能想出办法来做这件事吗?我更喜欢使用R。提前谢谢

# create some data
data = as.data.frame(list(A = c(24,26,25),
                     B = c(1,2,3),
                     C = c(2,3,1),
                     D = c(3,1,2)))

# adjust your margins to allow room for your second axis
par(mar=c(5, 4, 4, 4) + 0.1)
# create your first plot
plot(1:3,data$A,pch = 19,ylab = "1st ylab",xlab="index")

# set par to new so you dont' overwrite your current plot
par(new=T)
# set axes = F, set your ylim and remove your labels
plot(1:3,data$B,ylim = c(0,5), pch = 19, col = 2,
     xlab="", ylab="",axes = F)

# add your points
points(1:3,data$C,pch = 19,col = 3)
points(1:3,data$D, pch = 19,col = 4)

# set the placement for your axis and add text
axis(4, ylim=c(0,5))
mtext("2nd ylab",side=4,line=2.5)


我非常喜欢使用
ggplot2
进行绘图。遗憾的是,
ggplot2
不支持这一点

我想提出一个使用方面的替代方案,即子地块。请注意,为了能够使用
ggplot2
绘制数据,我们需要更改数据结构。我们使用
tidyr
包中的
collect
来完成此操作。此外,我使用了
dplyr
中定义的编程风格(它大量使用管道):


在这里,每个子绘图都有自己的y轴。

我非常喜欢使用
ggplot2
进行绘图。遗憾的是,
ggplot2
不支持这一点

我想提出一个使用方面的替代方案,即子地块。请注意,为了能够使用
ggplot2
绘制数据,我们需要更改数据结构。我们使用
tidyr
包中的
collect
来完成此操作。此外,我使用了
dplyr
中定义的编程风格(它大量使用管道):



在这里,每个子图都有自己的y轴。

我不确定你所说的a、b、c行有一条线将它们连接在一起,但如果你扩展你的意思来绘制图像,我可以调整下面的代码,也许这可以更好地解释你在双轴图中的需要,读者/观众如何知道哪个轴应该与哪个数据点一起使用?嗨@Heroka,我在考虑添加一个图例来解释它。嗨@Ranalyst,我的意思是类似于x/y图的东西,其中你有线来链接所有数据点属于a或b或c,在这种情况下,我想要一条线链接aA、aB、aC、aD,另一条线链接bA、bB,我不确定你所说的a,b,c是什么意思,行中有一条线将它们连接在一起,但如果你扩展你的意思来画一幅图像,我可以调整下面的代码,也许这可以更好地解释你的需要在双轴图中,读者/观众如何知道哪个轴应该与哪个数据点一起使用?Hi@Heroka,我正在考虑添加一个图例来解释它。嗨@Ranalyst,我的意思是类似于x/y图的东西,其中有线链接所有属于a或b或c的数据点,在这种情况下,我想要一条线链接aA、aB、aC、aD,另一条线链接bA、bB、bC、bD等。谢谢,这不是我的意思。抱歉让人困惑,假设我们有一只老鼠体重是25g,我想用百分比显示体重变化(第1天为1%,第4天为2%,等等),我知道我可以在第0天将所有老鼠设置为100%,但我还想包括它们的初始体重,这与每只老鼠不同。这有意义吗?eaiser的方法是日复一日地绘制他们的体重,但我只是想知道在R中是否有类似的替代品。我明白你的意思。您是否考虑过将初始鼠标质量添加到图例中?这样,您可以将权重变化%添加到绘图中。如果你在一个图例中有初始重量,并且只绘制了%,那么你的图表更有可能标准化(例如,所有值+/-10%),而如果你有两个重量相差很大的老鼠(例如,老鼠1=20克,老鼠2=50克)@Ranalysis,这也行得通,我实际上按照你最初说的做了,只是发布了这个,看看是否有其他方法。谢谢,谢谢,我不是这个意思。抱歉让人困惑,假设我们有一只老鼠体重是25g,我想用百分比显示体重变化(第1天为1%,第4天为2%,等等),我知道我可以在第0天将所有老鼠设置为100%,但我还想包括它们的初始体重,这与每只老鼠不同。这有意义吗?eaiser的方法是日复一日地绘制他们的体重,但我只是想知道在R中是否有类似的替代品。我明白你的意思。您是否考虑过将初始鼠标质量添加到图例中?这样,您可以将权重变化%添加到绘图中。如果你在一个图例中有初始重量,并且只绘制了%,那么你的图表更有可能标准化(例如,所有值+/-10%),而如果你有两个重量相差很大的老鼠(例如,老鼠1=20克,老鼠2=50克)@Ranalysis,这也行得通,我实际上按照你最初说的做了,只是发布了这个,看看是否有其他方法。谢谢。你好,保罗,谢谢。这是。比如说,在一列中绘制每个点,我需要的是在一行中绘制每个点。也就是说,如何将25,1,2,3放在一个图中,其中25属于一个轴,1,2,3属于另一个轴。嗨,保罗,谢谢。这是。比如说,在一列中绘制每个点,我需要的是在一行中绘制每个点。也就是说,如何把25,1,2,3放到一个图中,其中25属于一个轴,1,2,3属于另一个轴。
library(ggplot2)
library(dplyr)
library(tidyr)

df = data.frame(A = c(24, 26, 25), B = 1:3, C = c(2, 3, 1), D = c(3, 1, 2))
plot_data = df %>% mutate(x_value = rownames(df)) %>% gather(variable, value, -x_value)
ggplot(plot_data) + geom_line(aes(x = x_value, y = value, group = variable)) + 
                    facet_wrap(~ variable, scales = 'free_y')