Как получить тройные контурные графики с помощью ggtern 2.1.0?

Я экспериментировал с этим кодом и пытаюсь получить линии сетки над графиком.

введите описание изображения здесь

Используемый код такой же, как в OP:

#Orignal Data as per Question
a <- c(0.1, 0.5,0.5, 0.6, 0.2, 0          , 0         , 0.004166667, 0.45) 
b <- c(0.75,0.5,0  , 0.1, 0.2, 0.951612903,0.918103448, 0.7875     , 0.45)
c <- c(0.15,0  ,0.5, 0.3, 0.6, 0.048387097,0.081896552, 0.208333333, 0.10) 
d <- c(500,2324.90,2551.44,1244.50, 551.22,-644.20,-377.17,-100, 2493.04) 
df <- data.frame(a, b, c, d)

#For labelling each point.
df$id <- 1:nrow(df)

#Build Plot
ggtern(data=df,aes(x=c,y=a,z=b),aes(x,y,z)) + 
  stat_density2d(geom="polygon",
                 n=400,
                 aes(fill=..level..,
                 weight=d,
                 alpha=abs(..level..)),
                 binwidth=100) + 
  geom_density2d(aes(weight=d,color=..level..),
                 n=400,
                 binwidth=100) +
  geom_point(aes(fill=d),color="black",size=5,shape=21) + 
  geom_text(aes(label=id),size=3) + 
  scale_fill_gradient(low="yellow",high="red") + 
  scale_color_gradient(low="yellow",high="red") + 
  theme_tern_rgbw() + 
  theme(legend.justification=c(0,1), legend.position=c(0,1)) + 
  guides(fill = guide_colorbar(order=1),
         alpha= guide_legend(order=2),
         color="none") + 
  labs(  title= "Ternary Plot and Filled Contour",
         fill = "Value, V",alpha="|V - 0|")

#Save Plot
ggsave("TernFilled.png")

Можно ли получить линии сетки над контуром?

Обновить

Чтобы получить верхние линии сетки, я обновился до ggtern 2.1.0. После обновления мне пришлось изменить stat_density2d -> stat-density_tern и geom_density2d -> geom_density_tern, чтобы получить работающий код. Хотя он скомпилировал рисунок, показанный ниже, я не могу воспроизвести предыдущие графики, показанные выше. И мне пришлось добавить na.rm = TRUE, чтобы код работал

введите описание изображения здесь

library(ggtern)
#Orignal Data as per Question
a <- c(0.1, 0.5,0.5, 0.6, 0.2, 0          , 0         , 0.004166667, 0.45) 
b <- c(0.75,0.5,0  , 0.1, 0.2, 0.951612903,0.918103448, 0.7875     , 0.45)
c <- c(0.15,0  ,0.5, 0.3, 0.6, 0.048387097,0.081896552, 0.208333333, 0.10) 
d <- c(500,2324.90,2551.44,1244.50, 551.22,-644.20,-377.17,-100, 2493.04) 
df <- data.frame(a, b, c, d)

#For labelling each point.
df$id <- 1:nrow(df)

#Build Plot
ggtern(data=df,aes(x=c,y=a,z=b),aes(x,y,z)) + 
  stat_density_tern(geom="polygon",
                 n=400,
                 aes(fill=..level..,
                     weight=d,
                     alpha=abs(..level..)),
                 na.rm = TRUE) + 
  geom_density_tern(aes(weight=d,color=..level..),
                 n=400,
                  na.rm = TRUE) +
  geom_point(aes(fill=d),color="black",size=5,shape=21) + 
  geom_text(aes(label=id),size=3) + 
  scale_fill_gradient(low="yellow",high="red") + 
  scale_color_gradient(low="yellow",high="red") + 
  # theme_tern_rgbw() + 
  theme(legend.justification=c(0,1), legend.position=c(0,1)) + 
  guides(fill = guide_colorbar(order=1),
         alpha= guide_legend(order=2),
         color="none") + 
  labs(  title= "Ternary Plot and Filled Contour",
         fill = "Value, V",alpha="|V - 0|")

#Save Plot
ggsave("TernFilled.pdf")

Почему я не могу получить графики с предыдущей версией ggtern с обновленной версией? Чем заменяется binwidth?

1 ответ

Решение

С тех пор, как этот код был размещен в сети, произошли некоторые изменения.

Во-первых, и наиболее заметно, что касается вашего вопроса, это то, что плотность ядра по умолчанию теперь вычисляется в обратном логарифмическом пространстве, это может быть подавлено base='identity' аргумент.

Во-вторых, геометрия density_tern шла по тому же пути, что и ggplot2, при использовании аргумента 'h', как такового, binwidth теперь не имеет смысла.

Вот пример, который отображает результат ближе к вашему первоначальному ожиданию:

#Build Plot
ggtern(data=df,aes(x=c,y=a,z=b),aes(x,y,z)) + 
  stat_density_tern(geom="polygon",color='black',
                    n=400,h=0.75,expand = 1.1,
                    base='identity',
                    aes(fill   = ..level..,weight = d),
                    na.rm = TRUE) + 
  geom_point(color="black",size=5,shape=21) +
  geom_text(aes(label=id),size=3) + 
  scale_fill_gradient(low="yellow",high="red") + 
  scale_color_gradient(low="yellow",high="red") + 
  theme_rgbw() + 
  theme(legend.justification=c(0,1), legend.position=c(0,1)) +
  theme_gridsontop() + 
  guides(fill = guide_colorbar(order=1),color="none") + 
  labs(  title= "Ternary Plot and Filled Contour",fill = "Value, V")

пример

Другие вопросы по тегам