Как наложить несколько кривых плотности в один график в R

Короткий ответ - то, что можно использовать функциональность полнотекстового поиска Пост-ГРЭС со специализированной поисковой конфигурацией.

Начиная с Вашего контакта с названиями места, Ваш, вероятно, не хотят происходить, таким образом, можно использовать простую конфигурацию в качестве начальной точки. Можно также добавить стоп-слова, которые имеют смысл для названий места (с примерами выше, можно, вероятно, рассмотреть "Св.", "Святого" и "del" как стоп-слова).

А довольно основная схема установки Вашего специализированного ниже:

  1. Создают файл стоп-слов и помещают его в Ваш $SHAREDIR/tsearch_data каталог Postgres. См. https://www.postgresql.org/docs/9.1/static/textsearch-dictionaries.html#TEXTSEARCH-STOPWORDS.
  2. Создают словарь, который использует этот список стоп-слов (можно, вероятно, использовать pg_catalog.simple в качестве шаблонного словаря). См. https://www.postgresql.org/docs/9.1/static/textsearch-dictionaries.html#TEXTSEARCH-SIMPLE-DICTIONARY.
  3. Создают поисковую конфигурацию для названий места. См. https://www.postgresql.org/docs/9.1/static/textsearch-configuration.html .
  4. Изменяют Вашу поисковую конфигурацию для использования словаря, который Вы создали на Шаге 2 (cf. ссылка выше).

Другое соображение состоит в том, как рассмотреть интернационализацию. Кажется, что проблемой для Вашего второго примера (Ameca del Torro по сравнению с Ameca Torro) мог бы быть испанский по сравнению с английским представлением имени. Если это так, Вы могли также рассмотреть хранение и "локализованный" и "универсальное" (например, английский язык) версия названия города.

В конце, Ваш запрос (использующий полнотекстовый поиск) мог бы быть похожим на это (где 'места' являются названием Вашей поисковой конфигурации):

SELECT cities."id"
FROM cities
    INNER JOIN "state" ON "state".id = cities.state_id
WHERE
    "state".short_name = 'CA'
    AND TO_TSVECTOR('places', cities.name) @@ TO_TSQUERY('places', 'Los & Angeles')

6
задан Jilber Urbina 1 January 2014 в 17:27
поделиться

4 ответа

Попробуйте использовать ggplot2:

dnow <- read.table("http://dpaste.com/88561/plain/")
library(ggplot2)
qplot(V1, colour=factor(V2), data=dnow, geom="density")
11
ответ дан 8 December 2019 в 12:21
поделиться

Вы также можете решить эту проблему с помощью пакета lattice.

require(lattice)
dnow <- read.table('http://dpaste.com/88561/plain/')
densityplot(~V1, groups=V2, data=dnow)
4
ответ дан 8 December 2019 в 12:21
поделиться

Использование базовой графики в виде спагетти-кода:

plot.multi.dens <- function(s)
{
junk.x = NULL
junk.y = NULL
for(i in 1:length(s))
{
junk.x = c(junk.x, density(s[[i]])$x)
junk.y = c(junk.y, density(s[[i]])$y)
}
xr <- range(junk.x)
yr <- range(junk.y)
plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
for(i in 1:length(s))
{
lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
}
}
dnow <- read.table("http://dpaste.com/88561/plain/")
library(sqldf)
x <- unlist(sqldf("select V1 from dnow where V2==0"))
y <- unlist(sqldf("select V1 from dnow where V2==1"))
z <- unlist(sqldf("select V1 from dnow where V2==2"))
plot.multi.dens(list(x,y,z))
library(Hmisc)
le <- largest.empty(x,y,.1,.1)
legend(le,legend=c("x","y","z"), col=(1:3), lwd=2, lty = 1)
3
ответ дан 8 December 2019 в 12:21
поделиться

При просмотре данных микрочипа мне часто приходилось делать это, поэтому я свернул это как часть библиотеки служебного кода, хранящейся на github: ARE.utils , в частности, функция plot.densities .

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

  1. create.densities , который преобразует список / матрицу / и т.д. данных в список плотностей; и функция
  2. match.dim (которая преобразует «имена» измерений в числовые оси).

(Вы можете, при желании, установить весь пакет, но я не обещаю, что эти функции победили » t измениться каким-то обратно несовместимым образом).

Это ' Нетрудно написать свою собственную такую ​​функцию, но просто убедитесь, что у вас есть функция, выбирающая правильный диапазон по осям и так далее. В любом случае, вы могли бы затем использовать следующий код:

library(ARE.utils)
# Create a matrix dataset with separate observations in columns
dat <- matrix(c(rnorm(100), rnorm(100, mean=3), 
                rnorm(100, mean=3, sd=2)),
              ncol=3)
# Plot them
plot.densities(dat, along='cols')

Это создаст три различных графика плотности на одной оси с их собственными цветами.

1
ответ дан 8 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

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