R - Как создать сгруппированный штрих-график со значениями в разных столбцах? [Дубликат]

Почему так сложно? Вот как я это делаю ...

Swift 4:

var iPad : Bool {
    return UIDevice.current.model.contains("iPad")
}

Таким образом вы можете просто сказать if iPad {}

8
задан Ankit 18 April 2012 в 16:52
поделиться

3 ответа

В соответствии с запросом решение ggplot2, которое также использует reshape2:

library(reshape2)

df <- read.table(text = "       Input Rtime Rcost Rsolutions  Btime Bcost 
1   12-proc.     1    36     614425     40    36 
2   15-proc.     1    51     534037     50    51 
3    18-proc     5    62    1843820     66    66 
4    20-proc     4    68    1645581 104400    73 
5 20-proc(l)     4    64    1658509  14400    65 
6    21-proc    10    78    3923623 453600    82",header = TRUE,sep = "")

dfm <- melt(df[,c('Input','Rtime','Btime')],id.vars = 1)

ggplot(dfm,aes(x = Input,y = value)) + 
    geom_bar(aes(fill = variable),stat = "identity",position = "dodge") + 
    scale_y_log10()

enter image description here [/g0]

Обратите внимание на разницу стилей здесь, где с log(1) = 0, ggplot2 рассматривает это как полосу нулевой высоты и ничего не рисует, тогда как barplot отображает небольшую заглушку (что, на мой взгляд, мало вводит в заблуждение).

22
ответ дан joran 20 August 2018 в 22:56
поделиться
  • 1
    здорово. Хотелось бы, чтобы я знал это, прежде чем писать глупый скрипт python {Python это хорошо, хотя!) Спасибо большое joran – Ankit 18 April 2012 в 20:32
  • 2
    Стоит отметить, что melt находится в пакете reshape2 – Serenthia 8 July 2016 в 15:36
  • 3
    Кроме того, необходимо добавить stat = "identity" в geom_bar, поскольку он по умолчанию имеет значение stat = "bin" – Serenthia 8 July 2016 в 15:39
  • 4
    @Serenthia Спасибо, да, такая вещь - это повторяющаяся проблема с моими старыми ответами ggplot2, которые постоянно нужно обновлять по мере появления новых версий. – joran 8 July 2016 в 16:55
  • 5
    Этот пример не работает на R 3.3.3. Он выдает это сообщение об ошибке: «Ошибка: stat_count () не следует использовать с эстетическим эффектом y». – Luís de Sousa 10 March 2017 в 08:24

Я думаю, что понимаю проблему, и это то, что я хотел бы предложить (короткий пробег - опция):

data <- read.table("data.txt", header=TRUE)
subset <- t(data.frame(data$Rtime, data$Btime))
barplot(subset, legend = c("Rtime", "Btime"), names.arg=data$Input, log="y", beside=TRUE)

Это то, что вы хотите? Это своего рода грязный, но он выполняет эту работу.

Обновление: исправлен код.

5
ответ дан Luís de Sousa 20 August 2018 в 22:56
поделиться
  • 1
    Ты мужчина! Большое спасибо. Кроме того, вы знаете, как это сделать, используя ggplot? – Ankit 18 April 2012 в 16:53

Ответ joran мне очень помог, но мне пришлось использовать stat = "identity" в инструкции ggplot:

ggplot(dfm, aes(x = Input,y = value)) + 
geom_bar(aes(fill = variable), position = "dodge", stat="identity") + 
scale_y_log10()

Моя версия R равна 3.2 .2 и ggplot2 version 1.0.1

Спасибо.

3
ответ дан vtenhunen 20 August 2018 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: