是否有任何方法可以scale = 'free_y'在 ggplot2 的左側(第一)軸上設定并在右側(第二)軸上使用固定軸?
我有一個資料集,我需要對一個變數使用自由比例,對另一個變數使用固定,但在同一個圖上表示兩者。為此,我嘗試向我的資料添加第二個固定的 y 軸。問題是我找不到任何方法來為第二軸設定固定比例并將其反映在刻面網格中。
這是我迄今為止創建圖表的代碼 -
#plot weekly seizure date
p <- ggplot(dfspw_all, aes(x=WkYr, y=Seizures, group = 1)) geom_line()
xlab("Week Under Observation") ggtitle("Average Seizures per Week - To Date")
geom_line(data = dfsl_all, aes(x =WkYr, y = Sleep), color = 'green')
scale_y_continuous(
# Features of the first axis
name = "Seizures",
# Add a second axis and specify its features
sec.axis = sec_axis(~.[0:20], name="Sleep")
)
p facet_grid(vars(Name), scales = "free_y")
theme(axis.ticks.x=element_blank(),axis.text.x = element_blank())
這就是它所產生的(為簡單起見,代碼中省略了一些細節) -

我需要的是左側的刻度保持“自由”,右側的刻度范圍為 0-24。
uj5u.com熱心網友回復:
輔助軸在 ggplot2 中實作為裝飾,它是主軸的轉換,所以我不知道這樣做的優雅方法,因為它需要輔助軸公式了解每個方面的不同縮放因子。
這是一種 hacky 方法,我將每個次要系列擴展到其各自的主要系列,然后為次要系列添加一些手動注釋。另一種方法可能是像
...我們可以將每個次要系列擴展到其主要系列,并為該次要系列添加自定義注釋:
fake2 <- fake %>%
group_by(facet) %>%
mutate(y_sec_scaled = y_sec/max(y_sec) * (max(y_prim))) %>%
ungroup()
fake2_labels <- fake %>%
group_by(facet) %>%
summarize(max_prim = max(y_prim), baseline = 0, x_val = 10.5)
ggplot(fake2, aes(x, y_prim))
geom_line()
geom_line(aes(y= y_sec_scaled), color = "green")
facet_wrap(~facet, ncol = 1, scales = "free_y")
geom_text(data = fake2_labels, aes(x = x_val, y = max_prim, label = "100%"),
hjust = 0, color = "green")
geom_text(data = fake2_labels, aes(x = x_val, y = baseline, label = "0%"),
hjust = 0, color = "green")
coord_cartesian(xlim = c(0, 10), clip = "off")
theme(plot.margin = unit(c(1,3,1,1), "lines"))

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474417.html
下一篇:繪制沒有直線的時間序列
