Визуализация дисперсии текстовых данных - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь представить, как текстовые данные распределяются по позициям в предложениях.Вот некоторые фиктивные данные:

# create mock data:
dfmock <- data.frame(letter = c(sample(letters[1:3], 25, replace = T)),
                 position = c(rep(1, 5), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5))
                 ) 

Для графика я сначала создаю фиктивную рамку:

# create dummy data frame for plot:
dummytest <-data.frame(slots = 1:5, rows = 1:5)

, а затем строю контуры фиктивной рамки:

# plot:
plot(dummytest$rows ~ dummytest$slots, type="n", frame=F, axes=F)
axis(1, at=seq(1:5), labels=unique(dfmock$position))

Теперь я хотел бы выделить случаи, скажем, элемента «а»;Для этого я определяю цикл и использую функцию text (), чтобы выделить «a» красной сплошной линией и распечатать все остальное серым:

# print "a" in positions:
for(i in unique(dfmock$position)){
text(i, 1:5, "___", cex=1.75,
   col = ifelse(dfmock[dfmock$letter=="a",]$position==i, "red", "grey"))
}

Во время создания графика неправильное числоиз основных моментов показаны для каждой позиции.Я не могу просто понять, почему это так.Помощь очень ценится!

1 Ответ

0 голосов
/ 13 октября 2018

Я не на 100% желаемого результата, но, исходя из вышесказанного, это может исправить:

Использование фиктивных фреймов данных для настройки вашего кода

# create mock data:
dfmock <- data.frame(letter = c(sample(letters[1:3], 25, replace = T)),
                     position = c(rep(1, 5), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5))
) 

# create dummy data frame for plot:
dummytest <-data.frame(slots = 1:5, rows = 1:5)

Снова нанесите на график данные

# plot:
plot(dummytest$rows ~ dummytest$slots, type="n", frame=F, axes=F)
axis(1, at=seq(1:5), labels=unique(dfmock$position))

ИСПРАВЛЕНИЕ:

Кажется, ваш цикл FOR итерировал по неверным данным и, таким образом,ваш ifelse возвращал логический вектор, который не всегда был того же размера, что и данные вашего графика.

# print "a" in positions:
for(i in dfmock$position){
  text(i, dummytest$rows, "___", cex=1.75,
       col = ifelse(dfmock[dfmock$position==i,]$letter=="a", "red", "grey"))
}

Это привело к приведенному ниже PLOT для dfmock, как показано ниже:

> dfmock[dfmock$letter=="a",]
   letter position
4       a        1
8       a        2
12      a        3
13      a        3
14      a        3
21      a        5
25      a        5

enter image description here

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