Каков самый простой способ управления осью Y при использовании se c .axis - PullRequest
0 голосов
/ 25 мая 2020

Я прочитал все сообщения о масштабировании оси Y, и во всех из них есть некоторые дополнительные шаги, чтобы контролировать пределы оси Y при использовании se c .axis в ggplot.

У меня есть следующие df.

structure(list(day = c(1, 3, 5, 7, 9), mean = c(0.000452620431539136, 
0.000244953967091816, 0.000409529176828165, 0.000621566432113383, 
0.000975471413145951), sd = c(0.000145928952108396, 7.48403498938327e-05, 
8.70694523628839e-05, 0.000265199022927143, 0.00076194983870935
), group = c("pi", "pi", "pi", "pi", "pi")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

и

structure(list(day = c(1, 3, 5, 7), mean = c(NaN, 5.85880255563636, 
4.16535426125, 3.22060147866667), sd = c(NaN, 0.363838291664683, 
0.980379999667707, 1.17101416465057), group = c("Equi", "Equi", 
"Equi", "Equi")), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame"))

Я запускаю следующий код:

-ggplot(data=DI.pi.sum, aes(x=day, y=mean)) + geom_bar(stat = "identity", fill = "grey", size = 1.5) +
       geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), size = 0.1, width=.3,
                     position=position_dodge(1)) +
       geom_line(data=DI.Equi.sum, aes(x=day, y=mean/10000))  +
       geom_ribbon(data = DI.Equi.sum, 
                   aes(x=day, y = mean/10000, ymin=mean/10000-sd/10000, ymax=mean/10000+sd/10000),
                   alpha=0.2, fill = "grey40") +
       theme(panel.grid.major =  element_blank(),
             panel.grid.minor = element_blank(),
             panel.background = element_blank(),
             axis.line = element_line(colour = "black"),
             axis.text.x = element_text(face = "bold", size = 7),
             axis.title.y = element_text(face = "bold", size = 10),
             legend.direction = "vertical", legend.box = "horizontal") +
       scale_size(range = c(5, 15)) +
       scale_x_continuous(breaks = c(1, 3, 5, 7, 9), limits = c(0,10))  +
       scale_y_continuous(limits=c(0, 0.0020), sec.axis = sec_axis(~ . * 10000), name = "pi")  

Создание следующего графика:

enter image description here

Мне не нужна ось se c до go до 40. Было бы здорово получить всего 20.

Предложения?

Заранее спасибо.

1 Ответ

1 голос
/ 25 мая 2020

Диапазон среднего, которое вы хотите построить с помощью вторичной оси, составляет всего 3-6. Я скорректировал ваш вызов ggplot с помощью переменной коэффициента масштабирования, чтобы вы могли поиграть с тем, как вы хотите, чтобы выглядела вторичная ось. Коэффициент масштабирования 10000 дает вам диапазон вторичной оси от 0 до 20.


library(ggplot2)

scaling_factor = 10000

ggplot(data=DI.pi.sum, aes(x=day, y=mean)) + geom_bar(stat = "identity", fill = "grey", size = 1.5) +
  geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), size = 0.1, width=.3,
                position=position_dodge(1)) +
  geom_line(data=DI.Equi.sum, aes(x=day, y=mean/scaling_factor))  +
  geom_ribbon(data = DI.Equi.sum, 
              aes(x=day, y = mean/scaling_factor, ymin=mean/scaling_factor-sd/scaling_factor, ymax=mean/scaling_factor+sd/scaling_factor),
              alpha=0.2, fill = "grey40") +
  theme(panel.grid.major =  element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text.x = element_text(face = "bold", size = 7),
        axis.title.y = element_text(face = "bold", size = 10),
        legend.direction = "vertical", legend.box = "horizontal") +
  scale_size(range = c(5, 15)) +
  scale_x_continuous(breaks = c(1, 3, 5, 7, 9), limits = c(0,10))  +
  scale_y_continuous(limits=c(0, 0.0020), sec.axis = sec_axis(~ . * scaling_factor, name =  "secondary axis"), name = "pi")  


Как я могу построить график с двумя разными осями Y? , ggplot с 2 y оси на каждой стороне и разные масштабы и связанная статья Стивена Фью: http://www.perceptualedge.com/articles/visual_business_intelligence/dual-scaled_axes.pdf

Создано 25.05.2020 с помощью пакета . (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...