Как использовать диапазон осей и метки из исходных данных в ggtern?
Я использую ggtern в R для создания троичного графика и хотел бы, чтобы на моем графике ggtern были метки и разрывы оси, такие же, как у исходных данных. В случае сгенерированных данных в приведенном ниже коде каждая ось будет максимум до 12, 10 и 4.
После предыдущего поста я попытался использовать для этого разрывы и метки, но каждая ось по-прежнему находится в масштабе 0-1, метки отсутствуют (из-за того, что они больше 1), а линии осей с метками не пересекают точки на участке. ( Как изменить метки троичного участка, сделанные ggtern?)
library(ggtern)
labFnc <- function(x,digits=2) format(round(unique(x),digits),digits=digits)
mydata <- data.frame(
x = runif(50, min = 0.25, max = 12),
y = runif(50, min = 0.1, max = 10),
z = runif(50, min = 0.5, max = 4),
value = runif(50, min = 10000, max = 20000))
ggtern(data = mydata,aes(x = x, y = y, z = z,col=value)) +
theme_bw() +
geom_point(alpha = 0.8, size = 3) +
theme_showarrows() +
scale_T_continuous(breaks=unique(mydata$x),labels=labFnc(mydata$x))+
scale_L_continuous(breaks=unique(mydata$y),labels=labFnc(mydata$y))+
scale_R_continuous(breaks=unique(mydata$z),labels=labFnc(mydata$z))
Есть ли способ сделать это? Любая помощь будет принята с благодарностью.
Изменить: я также попытался добавить в аргумент tern_limits. Хотя это выглядит для пропорционального расширения графика, данные находятся не в том месте. и я не могу добавить в свои уникальные перерывы, как раньше.
ggtern(data = mydata,aes(x = x, y = y, z = z,col=value)) +
theme_bw() +
geom_point(alpha = 0.8, size = 3) +
theme_showarrows() +
tern_limits(T=12, L=10, R=4)
1 ответ
Решение, которое вы предоставили, идет по правильному пути, однако все аргументы limit_term(...)
Ожидается, что функция (или псевдонимы) будет в диапазоне [0,1], что соответствует [0,100%]. Значения могут быть предоставлены за пределами этого диапазона, однако это будет способствовать разрешению ограничений, которые будут содержать значения больше 100% и меньше 0%.
В итоге, используйте следующее:
tern_limits(T=12, L=10, R=4)
на самом деле просит, чтобы троичные пределы были ограничены максимумами 1200%, 1000% и 400% соответственно, что в точности соответствует полученному вами результату.
Во всяком случае, вот несколько примеров limits_tern
а также zoom
функциональность.
library(ggtern)
n = 100
df = data.frame(id=1:n,
x=runif(n),
y=runif(n),
z=runif(n))
base = ggtern(df,aes(x,y,z,color=id)) + geom_point(size=3)
base
#Top Corner
base + limit_tern(1.0,0.5,0.5)
#Left Corner
base + limit_tern(0.5,1.0,0.5)
#Right Corner
base + limit_tern(0.5,0.5,1.0)
#Center Zoom Convenience Function
base + theme_zoom_center(0.4) # Zoom In
base + theme_zoom_center(0.6) # Zoom In
base + theme_zoom_center(0.8) # Zoom In
base + theme_zoom_center(1.0) ##Default as per no zoom
base + theme_zoom_center(1.2) # Zoom Out
base + theme_zoom_center(1.4) # Zoom Out
base + theme_zoom_center(1.6) # Zoom Out
base + theme_zoom_center(1.8) # Zoom Out
base + theme_zoom_center(2.0) # Zoom Out
#Left Zoom Convenience Function
# (try theme_zoom_R and theme_zoom_T for Right and Top respectively)
base + theme_zoom_L(0.4) # Zoom In
base + theme_zoom_L(0.6) # Zoom In
base + theme_zoom_L(0.8) # Zoom In
base + theme_zoom_L(1.0) ##Default as per no zoom
base + theme_zoom_L(1.2) # Zoom Out
base + theme_zoom_L(1.4) # Zoom Out
base + theme_zoom_L(1.6) # Zoom Out
base + theme_zoom_L(1.8) # Zoom Out
base + theme_zoom_L(2.0) # Zoom Out
Обратите внимание: все эти вспомогательные функции упрощают масштабирование, а не управляют пределами независимо (что является действительным) с помощью scale_X_continuous(...) [X = T,L,R]. В отличие от чисто декартовой системы координат, где x и y независимы, в троичной системе ограничения должны иметь смысл, чтобы три точки вершины удовлетворяли условиям симплекса.
Если вам необходимо управлять каждой осью независимо, здесь ниже приведен пример, где определены все пределы, разрывы осей и метки осей для осей T, L и R соответственно. Если пределы бессмысленны с точки зрения симплексных условий, будет сгенерирована ошибка.
ggtern() +
scale_T_continuous(limits=c(0.5,1.0),
breaks=seq(0,1,by=0.1),
labels=LETTERS[1:11]) +
scale_L_continuous(limits=c(0.0,0.5),
breaks=seq(0,1,by=0.1),
labels=LETTERS[1:11]) +
scale_R_continuous(limits=c(0.0,0.5),
breaks=seq(0,1,by=0.1),
labels=LETTERS[1:11])