这是我的问题,我有这样的数据
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。另外,我想要一个,b,c行有一条线将它们链接在一起(假设a,b,c代表一个鼠标ID)。任何人都可以提出如何做的想法吗?我更喜欢使用R.提前谢谢!
答案 0 :(得分:3)
# 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)
答案 1 :(得分:1)
我更喜欢使用ggplot2
进行绘图。遗憾的是,ggplot2
不支持此for philosophical reasons。
我想提出一种使用方面的替代方案,即子图。请注意,为了能够使用ggplot2
绘制数据,我们需要更改数据结构。我们使用gather
包中的tidyr
执行此操作。另外,我使用dplyr
中定义的编程风格(它经常使用管道):
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')
这里,每个子图都有自己的y轴。