この問題は私を夢中にさせてきました。2 つの異なるデータセットで散布図を作成しようとしています。私のデータフレームは
structure(list(x1 = c(5L, 3L, 4L, 5L, 4L, 8L, 5L, 6L, 3L, 4L,
5L, 6L, 8L, 4L), y1 = c(7L, 5L, 6L, 4L, 1L, 5L, 6L, 9L, 8L, 4L,
5L, 6L, 7L, 8L), class1 = structure(c(1L, 2L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("A", "B"), class = "factor"),
x2 = c(4L, 8L, 7L, 5L, 6L, 2L, 5L, 4L, 5L, NA, NA, NA, NA,
NA), y2 = c(7L, 5L, 1L, 4L, 5L, 8L, 4L, 5L, 8L, NA, NA, NA,
NA, NA), class2 = structure(c(3L, 2L, 2L, 2L, 3L, 2L, 2L,
3L, 3L, 1L, 1L, 1L, 1L, 1L), .Label = c("", "A", "B"), class = "factor")), .Names = c("x1",
"y1", "class1", "x2", "y2", "class2"), class = "data.frame", row.names = c(NA,
-14L))
次のようになります。
x1 y1 class1 x2 y2 class2
5 7 A 4 7 B
3 5 B 8 5 A
4 6 A 7 1 A
5 4 A 5 4 A
4 1 B 6 5 B
8 5 B 2 8 A
5 6 B 5 4 A
6 9 B 4 5 B
3 8 B 5 8 B
4 4 A
5 5 A
6 6 A
8 7 A
4 8 A
2 つの散布図をプロットしたい:
x1
対y1
x2
対y2
class1
各散布図で、シンボルの形状をクラスおよびによって決定したいと考えていますclass2
。クラスは または のいずれA
かB
であるため、両方のプロットでシンボルの形状を同じに保ちたいと思います。
私はこれを試みるために次のコードを使用しています:
library(ggplot2)
theme_set(theme_bw()) # omit grey background
qplot(x1, y1, data=df, shape=I(21), fill=I("gray"), size = I(4),alpha = I(0))+
stat_smooth(method="lm", se=FALSE, colour="black", size=1) + geom_point(shape=factor(class1), size=I(4))
qplot(x2, y2, data=df, shape=I(21), fill=I("gray"), size = I(4),alpha = I(0))+
stat_smooth(method="lm", se=FALSE, colour="black", size=1) + geom_point(shape=factor(class2), size=I(4))
x1/y1
myとの長さがx2/y2
同じ場合は問題なく動作します。その場合、シンボルは両方のプロットで同じままです。ただし、データセットの長さが異なる場合 (上記のデータフレームの例のように)、3 番目のシンボルが 2 番目のプロットに導入されます。
両方のプロットで 同じシンボルA
を取得する方法を知っている人はいますか?B
編集:Didzis Elfertsによって以下に提案された方法を試してみると
ggplot(df,aes(x1,y1,shape=class1))+geom_point(size=4)+
scale_shape_manual(breaks=c("A","B"),values=c(15,16))
ggplot(df,aes(x2,y2,shape=class2))+geom_point(size=4)+
scale_shape_manual(breaks=c("A","B"),values=c(15,16))
次のエラーが表示されます。
Error: Insufficient values in manual scale. 3 needed but only 2 provided.
EDIT 2: Didzis Elferts は次の解決策を推奨しました
df$class2<-factor(df$class2,levels=c("A","B"))
ただし、使用して各散布図に回帰直線を追加しようとすると
ggplot(df,aes(x1,y1,shape=class1))+geom_point(size=4)+ scale_shape_manual(breaks=c("A","B"),values=c(15,16))+ stat_smooth(method="lm", se=FALSE, colour="black", size=1)
qplot(x2, y2, data=df, shape=class1)+ stat_smooth(method="lm", se=FALSE, colour="black", size=1) + geom_point(size=4)+ scale_shape_manual(breaks=c("A","B"),values=c(15,16))
ggplot2 は、クラスごとに個別の回帰直線を追加します。代わりに、両方のクラスのデータをまとめたものに基づく単一の回帰直線が必要です (シンボルが異なっていても)。