Plor с R - ggplot - Линейный график - Химический анализ - Schöller Plot [дубликат]

С помощью collections.Counter вы можете сделать

>>> import collections
>>> stats = {'a':1000, 'b':3000, 'c': 100}
>>> stats = collections.Counter(stats)
>>> stats.most_common(1)
[('b', 3000)]

. Если нужно, вы можете просто начать с пустого collections.Counter и добавить к нему

>>> stats = collections.Counter()
>>> stats['a'] += 1
:
etc. 
225
задан Henrik 2 May 2018 в 11:37
поделиться

4 ответа

Для небольшого числа переменных вы можете сами создать сборку вручную:

ggplot(test_data, aes(date)) + 
  geom_line(aes(y = var0, colour = "var0")) + 
  geom_line(aes(y = var1, colour = "var1"))
285
ответ дан hadley 16 August 2018 в 04:32
поделиться
  • 1
    хороший пример, но как настроить собственные цвета (например, черный и оранжевый) ?, потому что кажется, что вы используете colour= в качестве имени переменной. – Darwin PC 27 October 2015 в 15:23
  • 2
    Используйте шкалу .... – hadley 28 October 2015 в 02:56
  • 3
    +scale_colour_manual(values=c("black", "orange")) – Dave X 18 September 2017 в 18:16
  • 4
    В моем случае это возвращает строки с интервалами .... – Hercules Apergis 14 May 2018 в 17:37

Вам нужны данные, которые должны быть в «высоком» формате вместо «wide» для ggplot2. «широкий» означает наличие наблюдения за строку с каждой переменной в виде другого столбца (как и у вас сейчас). Вам нужно преобразовать его в «высокий» формат, где у вас есть столбец, который сообщает вам имя переменной и другой столбец, в котором указывается значение переменной. Процесс перехода от широкого к высокому обычно называют «плавлением». Вы можете использовать tidyr::gather для растапливания вашего фрейма данных:

library(ggplot2)
library(tidyr)

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )
test_data %>%
    gather(key,value, var0, var1) %>%
    ggplot(aes(x=date, y=value, colour=key)) +
    geom_line()

Просто чтобы очистить data, который ggplot потребляет после того, как трубопровод через gather выглядит следующим образом:

date        key     value
2002-01-01  var0    100.00000
2002-02-01  var0    115.16388 
...
2007-11-01  var1    114.86302
2007-12-01  var1    119.30996
20
ответ дан ecerulm 16 August 2018 в 04:32
поделиться

Использование ваших данных:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
Dates = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

Я создаю сложную версию, с которой ggplot() хотел бы работать с:

stacked <- with(test_data,
                data.frame(value = c(var0, var1),
                           variable = factor(rep(c("Var0","Var1"),
                                                 each = NROW(test_data))),
                           Dates = rep(Dates, 2)))

В этом случае создание stacked было довольно просто, поскольку нам нужно было сделать пару манипуляций, но reshape() и reshape и reshape2 могут быть полезны, если у вас есть более сложный набор данных, который можно манипулировать.

После того, как данные находятся в этой сложной форме, для этого требуется только простой вызов ggplot() для создания сюжета, который вы хотите, со всеми дополнительными функциями (одна из причин, почему такие высокоуровневые пакеты построения, как lattice и ggplot2, настолько полезны):

require(ggplot2)
p <- ggplot(stacked, aes(Dates, value, colour = variable))
p + geom_line()

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

HTH

12
ответ дан Gavin Simpson 16 August 2018 в 04:32
поделиться
  • 1
    Я думаю, что у вас в вашем коде есть неуместные парнеры. Я думаю, что это то, что вам нужно: stacked & lt; - with (test_data, data.frame (value = c (var0, var1), variable = factor (rep (c («Var0», «Var1»))) , each = NROW (test_data), Dates = rep (дата, 2))). Кроме того, какова цель столбца «каждый»? И разве это не просто более запутанный и менее эффективный способ расплавления данных, как показано rcs? Наверное, я мог представить себе пример, где расплавление не получило бы работу, но это почти наверняка правильный инструмент для этой работы, если я не упустил что-то? – Chase 23 September 2010 в 13:56
  • 2
    @chase, извините, это Emacs ESS, получивший отступы. каждый из них является аргументом rep(), поэтому мы действительно получаем только 3 cols в stacked. Я отредактирую код, чтобы сделать отступ четким. – Gavin Simpson 23 September 2010 в 17:28
  • 3
    @гнаться; ваш комментарий о melt() хорошо принят, и я отмечаю, что пакет reshape [2] был бы полезен здесь. Я не так хорошо знаком с reshape2, и для такого простого манипулирования это делается вручную сложнее, чем вызов melt(), это было меньше усилий, так как мне не нужно было читать, как использовать melt(). И rcs пробрался с его ответом, пока я производил мой; когда я начал отвечать, ответов не было. более чем один способ кожи кошки - как говорится! ;-) – Gavin Simpson 23 September 2010 в 17:33

Общий подход заключается в преобразовании данных в длинный формат (с использованием melt() из пакета reshape или reshape2) или gather() из пакета tidyr:

library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
       geom_line()

ggplot2 output [/g0]

291
ответ дан rcs 16 August 2018 в 04:32
поделиться
  • 1
    Вы также можете использовать функцию gather() пакета tidyr для расплавления данных: gather(test_data, variable, value, -date) – janosdivenyi 9 December 2015 в 11:13
Другие вопросы по тегам:

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