1. ホーム
  2. r

[解決済み] geom_ribbonでグラフ化する方法

2022-02-03 08:12:38

質問

3つのテーブルがあります。

Upper  Bound  
    Q      C   
    1     30  
    2     50  
    3     40

Lower  Bound      
    Q      C       
    1     10   
    2     15     
    3     20 

悪いデータです。

Q      C      Name  
1      50     Sample 1  
2      40     Sample 1  
3      30     Sample 1  
1      0      Sample 2  
2      60     Sample 2  
3      5      Sample 2

下限と上限をグレーでグラフ化し、その間をすべて塗りつぶし、上部に悪いサンプルを色を変えてグラフ化し、凡例を付けるグラフが欲しい。

plot <- ggplot(Bad_Data, aes(x = Bad_Data$Q, y = Bad_Data$C, group = 1))
plot + geom_line(aes(color = N)) + geom_ribbon(aes(ymin = Lower_Bound$C, ymax = Upper_Bound$C))  

試してみましたが、このようなエラーが出てしまいました。

エラーです。エステティックは長さ1か、データと同じでなければなりません (624): ymin, ymax, x, y, group

どなたか助けてください。

どのように解決するのですか?

色や他のパラメータを微調整して、好みのダイナミクスを得ることができます。私は、いくつかの美学を、それぞれが何をするのかの説明とともに追加しました。

#Prepare
Bad_Data$Lower_Bound <- Lower_Bound$C
Bad_Data$Upper_Bound <- Upper_Bound$C

#Plot
library(ggplot2)
p <- ggplot(Bad_Data, aes(x = Q, y = C, color=Name, group=Name))
p <- p + geom_line()
p + geom_ribbon(aes(ymin=Lower_Bound, ymax=Upper_Bound), 
                alpha=0.1,       #transparency
                linetype=1,      #solid, dashed or other line types
                colour="grey70", #border line color
                size=1,          #border line size
                fill="green")    #fill color

データ

以下はそのデータです。

Upper_Bound <- read.table(text="Q      C   
1     30  
                          2     50  
                          3     40", header=T)

Lower_Bound <- read.table(text="Q      C       
                          1     10   
                          2     15     
                          3     20", header=T) 

Bad_Data <- read.table(text="Q      C      Name  
                       1      50     Sample1  
                       2      40     Sample1  
                       3      30     Sample1  
                       1      0      Sample2  
                       2      60     Sample2  
                       3      5      Sample2", header=T)

編集

より安全な準備を。

Bad_Data$Lower_Bound <- Lower_Bound$C[match(Bad_Data$Q, Lower_Bound$Q)]
Bad_Data$Upper_Bound <- Upper_Bound$C[match(Bad_Data$Q, Upper_Bound$Q)]