Как создать два столбца с разными осями X и Y на одном графике в R? - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно построить два сгруппированных штрих-кода с двумя информационными кадрами с разным количеством строк: 6, 5.

Я пробовал много кодов в R, но я не знаю, как это исправить

Вот мои фреймы данных: столбец Freq должен быть по оси Y, а столбцы inter и intra - по оси x.

> freqinter
              inter Freq
1 0.293040975264367   17
2 0.296736775990729    2
3 0.297619926364764    4
4 0.587377012109561    1
5 0.595245125315916    4
6 0.597022018595893    2

> freqintra
              intra Freq
1                 0    3
2 0.293040975264367   15
3 0.597022018595893    4
4 0.598809552335782    2
5 0.898227748764939    6

Я рассчитываю построить графики на одном и том же графике, и они могут отличаться между внутренними значениями по цвету

Я хочу такую ​​картинку: graph

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Возможно, вам нужна гистограмма.Используйте необработанные данные, если это возможно.Например:

library(tidyverse)

freqinter <- data.frame(x = c(
  0.293040975264367,
  0.296736775990729,  
  0.297619926364764,
  0.587377012109561,   
  0.595245125315916,   
  0.597022018595893), Freq = c(17,2,4,1,4,2))

freqintra <- data.frame(x = c(
  0 ,
  0.293040975264367,
  0.597022018595893,
  0.598809552335782,
  0.898227748764939), Freq = c(3,15,4,2,6))

df <- bind_rows(freqinter, freqintra, .id = "id") %>% 
  uncount(Freq)

ggplot(df, aes(x, fill = id)) + 
  geom_histogram(binwidth = 0.1, position = 'dodge', col = 1) +
  scale_fill_grey() +
  theme_minimal()

enter image description here

0 голосов
/ 05 июня 2019

С данными, которые вы разместили, я не думаю, что вы можете иметь этот график, чтобы выглядеть хорошо. У вас не может быть достаточно тонких столбцов, чтобы различать 0.293 и 0.296, когда ваши данные колеблются от 0 до 0.9.

Может быть, вы могли бы попытаться рассматривать это как фактор, просто чтобы проиллюстрировать, что вы хотите сделать:

freqinter <- data.frame(x = c(
0.293040975264367,
0.296736775990729,  
0.297619926364764,
0.587377012109561,   
0.595245125315916,   
0.597022018595893), Freq = c(17,2,4,1,4,2))

freqintra <- data.frame(x = c(
               0 ,
0.293040975264367,
0.597022018595893,
0.598809552335782,
0.898227748764939), Freq = c(3,15,4,2,6))

df <- bind_rows(freqinter, freqintra, .id = "id")

ggplot(df, aes(x = as.factor(x), y = Freq, fill = id)) + 
      geom_bar(stat = "identity", position = position_dodge2(preserve = "single")) +
      theme(axis.text.x = element_text(angle = 90)) + 
      scale_fill_discrete(labels = c("inter", "intra"))

enter image description here

Вы также можете проверить проблему, не обрабатывая переменную x как фактор:

ggplot(df, aes(x = x, y = Freq, fill = id)) + 
  geom_bar(stat = "identity", width = 0.05, position = "dodge") +
  theme(axis.text.x = element_text(angle = 90)) + 
  scale_fill_discrete(labels = c("inter", "intra"))

Либо столбцы должны быть очень тонкими (маленькие width), либо вы получите перекрывающиеся интервалы x, нарушающие график.

enter image description here

...