

おそらく、うまく検索をかけたら、解決策が見つかるのかもしれませんが、  
私にはたどり着けませんでした。  
ご教授のほど、お願いいたします。

Rでtidyverseとqiime2Rを用いて作図を試みています。

[code]

    metadata<-read_q2metadata("metadata.tsv")
    pco<-read_qza("unweighted_unifrac_pcoa_results.qza")
    
    colpal<-c("red","blue","magenta","deepskyblue","maroon4","darkgreen","orange","blueviolet","honeydew4","black","salmon4")
    
    pcou$data$Vectors %>%
      select(SampleID, PC1, PC2) %>%
      left_join(metadata) %>%
      ggplot(aes(x=PC1, y=PC2, color=`wks`, shape=`experiment-Sex`)) +
      geom_point(alpha=0.7, size=3) +
      theme_bw() +
      scale_shape_manual(values=c(16,17,15,18,18), name="Experimental priod-Sex") +
      scale_color_manual(values=colpal, name="Post inoculum day") +
      guides(shape=guide_legend(order=1), color=guide_legend(order=2)) +
      ggtitle("Unweighted UniFrac") +
      theme(aspect.ratio=1, plot.title=element_text(size=20, face="bold"))
    
[/code]

reference: Plotting PCoA  
<https://forum.qiime2.org/t/tutorial-integrating-qiime2-and-r-for-data-
visualization-and-analysis-using-qiime2r/4121>

[![UniFrac
PCoA](https://i.stack.imgur.com/Myh0N.png)](https://i.stack.imgur.com/Myh0N.png)

この、色の凡例を日数順にするため、

[code]

    scale_color_manual(values=colpal, name="Post inoculum day", labels=c("1d","2d",...,"Origin_inoculum") +
    
[/code]

と「scale_color_manual」の部分に「labels」を加えると、  
凡例の日数項目名は希望通りの順番になるのですが、描画のプロット色と一致しなくなります。  
（1dが赤、2dが青...となってしまう）

どこを修正すれば、描画プロットと凡例が一致するようになるのでしょうか。

ちなみに、「Experimental priod-Sex」は三次元描写と一致できています。

補足情報が足りないようでしたら、コメントにてご指示ください。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2020-08-03T09:37:01.473
69207
2021-07-25T15:06:45.450
38287
question
macos r tidyverse ggplot2
ggplot2で凡例とプロット色を一致させた状態で、凡例項目順を変更させたい。


ヘルプの `values` 引数の説明に

> The values will be matched in order (usually alphabetical) with the limits
> of the scale, or with breaks if provided.

とあります.

色を指定する `values` を設定したならば, 対応する `wks` 列の値がなんであるのか `breaks` で指定する必要があります.
設定しない場合, ソートした順などになるため対応関係がおかしくなることがあります. そして `labels`
はあくまで凡例のラベルを上書きするためのもので, 対応関係を指定するものではありません.

よって, `breaks` にも `labels` に指定したものと同じものを指定してください.

`shape` の表示が正しいのはたまたまソートしても順番が変わらないためだと思います.

例:

[code]

    g <- ggplot(iris, aes(x = Sepal.Length, Sepal.Width, color = Species)) + geom_point()
    g
    g + scale_color_manual(values = c("red","blue","magenta"), labels = c("versicolor", "setosa", "virginica"))
    g + scale_color_manual(values = c("red","blue","magenta"), breaks = c("versicolor", "setosa", "virginica"), labels = c("versicolor", "setosa", "virginica"))
    
[/code]

**補足** : `breaks`, `values`, `labels` にそれぞれ与える他に, `values` に名前付きベクトルを与えることで
`breaks` と `values` の対応関係を指定できるため, 以下のような書き方も可能です.

[code]

    g + scale_color_manual(
      values = c(versicolor = "red", setosa = "blue", virginica = "magenta"),
      labels = c("versicolor", "setosa", "virginica"))
    
[/code]

<https://ggplot2.tidyverse.org/reference/scale_manual.html>


CC BY-SA 4.0
2020-08-03T10:31:35.387
69209
2021-07-25T15:06:45.450
2021-07-25T15:06:45.450
40575
40575
69207
answer