我正在 R 中創建一個散點圖,用戶可以在其中添加或洗掉顯示固定參考值的水平線。這樣做時,我注意到更改參考線的名稱會重新排列圖例,因此有時水平線出現在分散圖例元素之前,有時出現在之后。
比較:

到

下面是一個可復制的例子
YEAR = as.integer(rep(2010:2020,5))
SERIES_NAME = rep(LETTERS[1:5], each = 11)
OBS_VALUE = runif(n = 55, min = -5, max = 20)
EA = ifelse(SERIES_NAME=='A', 'Option 1', 'Option 2')
df <- data.frame(YEAR=YEAR,
SERIES_NAME=SERIES_NAME,
OBS_VALUE=OBS_VALUE,
EA=EA)
注釋掉兩條線中的一條或另一條以生成圖表,在其中命名圖例上的水平線。
aaaaaaa <- "RGCUZYMSFP" # appears above
aaaaaaa <- "IZTCYUXGBO" # appears below
然后生成圖表:
df %>%
select(YEAR,SERIES_NAME, OBS_VALUE, EA) %>%
ggplot()
ggplot2::geom_point(
ggplot2::aes(
x = YEAR,
y = OBS_VALUE,
col = EA),
size = 2)
ggplot2::guides(
color = ggplot2::guide_legend(nrow = 2,
byrow = TRUE))
scale_linetype_manual(values = 2)
scale_x_continuous(breaks = seq(2010,2020,5))
geom_hline(aes(yintercept = EAMean,
linetype = aaaaaaa),
size = 1, color = "black")
我還注意到更改變數的名稱會更改輸出。如果我將變數的名稱從aaaaaaaa(字母 a 的 8 倍)更改為aaaaaaa(字母 a 的 7 倍)并相應地更新水平線的代碼,圖例將重新排序

有沒有一種方法可以讓我更一致地控制我的圖例專案的去向?
uj5u.com熱心網友回復:
正如@stefan 正確指出的那樣,這取決于“秘密演算法”。如果未設定“順序”,則演算法的結果是不可預測的,但我們可以對它的作用進行逆向工程。
在這些guide_legend()方法行中,我們看到構造了一個“散列”,它對于指南的標題、標簽、方向和名稱(相對)是唯一的。這里的不可預測性在于散列,它可以為相對相似(但不相同)的輸入創建大不相同的散列。
稍后,在guides_merge()內部函式中,我們可以看到指南(或指南定義)在其散列上被拆分。由于散列對相同的輸入產生相同的結果,這會指示 ggplot2 由于共享標題、標簽、方向和名稱,這些指南是否“可合并”。
'order' 引數的作用是將 'order' 粘貼在散列的前面,以便按字典順序order = 0使用order = 1. 沒有設定順序引數的指南按順序獲取99。因為拆分會根據拆分級別以排序的順序回傳結果,所以這可以有效地按順序對輸出進行排序,然后是散列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381251.html
上一篇:多組的ggplot條形圖 折線圖
