Изменение графика на логарифмический масштаб, но с сохранением осей в логарифмическом масштабе - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть код, который в настоящее время выглядит следующим образом (благодаря помощи многих из вас на этом сайте, так что спасибо!)

#my data
DF <- data.table("Site_No" = c(123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123), 
 "variable" = 
c(1,1,2,2,5,5,10,10,20,20,25,25,30,30,40,40,50,50,60,60,70,70,75,75,80,80,90,90,95,95,98,98,99,99), 
"Test" = c("value.x", "value.y", "value.x", "value.y", "value.x", "value.y","value.x", "value.y", 
"value.x", "value.y", "value.x", "value.y","value.x", "value.y", "value.x", "value.y", "value.x", 
"value.y","value.x", "value.y", "value.x", "value.y", "value.x", "value.y","value.x", "value.y", 
"value.x", "value.y","value.x", "value.y","value.x", "value.y","value.x", "value.y"),                                                                                                                                               
"Value" = c(800, 700, 600, 580, 570, 560, 520, 500, 430, 415, 412, 402, 380, 370, 366, 300, 290, 280, 
270, 260,  250, 240, 230, 220, 210, 200, 180, 160, 150, 130, 100, 95, 67, 40))


#create plots
for (i in unique(DF$Site_No)){
graph <- ggplot(data = DF[Site_No == i,], mapping = aes(x = variable, y = Value, group 
                                                      = Test)) +
geom_line(aes(color = Test)) +
scale_color_discrete(labels = c("annual","winter"))+
scale_x_discrete(name ="Percent Chance Flow Exceeded", 
                     limits=c("1", "10", "20", "30", "40", "50", "60", "70", "80", "90", "99"))+
labs(x = "Percent Chance Flow Exceeded", y = "Streamflow, In cubic feet per second")+
ggtitle(paste(i))

ggsave(filename = paste0("Site_",i,".png"), plot = graph, device = "png", width  = 5, height = 5, units = "in")
}

Вот мои запросы, которые я хотел бы изменить, пожалуйста! 1) Сделайте так, чтобы ось X была разнесена так: 0,5, 2, 5, 10, 20, 30, 40, 60, 70, 80, 90, 95, 98, 99

2) линии (годовые и зимние) должны быть в логарифмическом масштабе, но держать ось Y НЕ в логарифмическом масштабе!

Большое спасибо за вашу помощь:) !!!

1 Ответ

1 голос
/ 22 апреля 2020

Я использую data.frame, так что я могу использовать обычную трубу в обратном направлении. Вам нужно преобразовать свои данные перед построением графика. Я бы сделал это перед тем, как передать ваши данные для l oop. Я удалил это l oop в этом примере, потому что ваши данные содержали только один идентификатор.

Чтобы показать разрывы осей на круглых «читаемых» числах, вам нужны значения журнала этих круглых чисел для разрывов осей, а затем для меток используйте показатель степени в журнале ... если это делает смысл. Смотрите код.

library(tidyverse)
DF <- data.frame("Site_No" = c(123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123), 
                 "variable" = 
                   c(1,1,2,2,5,5,10,10,20,20,25,25,30,30,40,40,50,50,60,60,70,70,75,75,80,80,90,90,95,95,98,98,99,99), 
                 "Test" = c("value.x", "value.y", "value.x", "value.y", "value.x", "value.y","value.x", "value.y", 
                            "value.x", "value.y", "value.x", "value.y","value.x", "value.y", "value.x", "value.y", "value.x", 
                            "value.y","value.x", "value.y", "value.x", "value.y", "value.x", "value.y","value.x", "value.y", 
                            "value.x", "value.y","value.x", "value.y","value.x", "value.y","value.x", "value.y"),                                                                                                                                               
                 "Value" = c(800, 700, 600, 580, 570, 560, 520, 500, 430, 415, 412, 402, 380, 370, 366, 300, 290, 280, 
                             270, 260,  250, 240, 230, 220, 210, 200, 180, 160, 150, 130, 100, 95, 67, 40))


DF %>% mutate(logval = log(Value)) %>%
  ggplot(mapping = aes(x = variable, y = logval, group  = Test)) +
  geom_line(aes(color = Test)) +
  scale_color_discrete(labels = c("annual","winter")) +
  scale_y_continuous(breaks = log(seq(100,800,100)), labels = exp(log(seq(100,800,100)))) +
  scale_x_discrete(name ="Percent Chance Flow Exceeded", 
                   limits=c( 0.5, 2, 5, 10, 20, 30, 40, 60, 70, 80, 90, 95, 98, 99)) +
  labs(x = "Percent Chance Flow Exceeded", y = "Streamflow, In cubic feet per second")

Создано в 2020-04-22 пакетом Представить (v0.3.0)

...