Использование всплывающих подсказок BarChart [ ] для иллюстрации того, откуда поступают данные

#wolfram-mathematica #visualization

#wolfram-mathematica #визуализация

Вопрос:

В настоящее время я визуализирую частоту слов и фраз в большой базе данных текстовой информации (примерно 108 МБ, распределенных по 307 текстовым файлам).). Моя цель — иметь способ быстро увидеть, какие файлы являются наиболее релевантными и в визуально привлекательном формате (хотя этот проект, вероятно, также продемонстрирует, что простое текстовое представление всегда понятнее).

Прямо сейчас у меня есть следующее:

 SetDirectory["/MYMATHEMATICADIRECTORY/"];
filelist = FileNames[];
viewerCount1 = {0};
viewerCount2 = {0};
word1 = "freedom";
word2 = "liberty";
Do[
  searchDB = StringSplit[Import[filename]];
  AppendTo[viewerCount1, Count[searchDB, word1]];
  AppendTo[viewerCount2, Count[searchDB, word2]];
, {filename, filelist}]

list3 = Take[viewerCount1, {2, -1}]
list4 = Take[viewerCount2, {2, -1}]
 

FileNames[ ] генерирует список, такой как: {«001ABbenevolat.txt-cleaned.txt «, «002abnature.txt-cleaned.txt «, «003aboriginaldocs.txt-cleaned.txt «, «004ABpresse.txt-cleaned.txt «, «005acadian.txt-cleaned.txt «, «006acadiedelile.txt-cleaned.txt «,»007acfa.txt-cleaned.txt «} [за исключением 307 записей, все пронумерованы].

list3 генерирует список, такой как: {0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2,0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 10, 1, 7, 0, 0, 0, 0, 23, 3, 0, 0, 0, 0,0, 0, 0, 0, 2, 0, 0, 0, 9, 0, 1, 0, 1, 0, 5, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2,0, 4, 0, 0, 0, 1, 11, 0, 2, 0, 0, 2, 7, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13,…} и так далее.

Команда:

 BarChart3D[{list3, list4}, BarSpacing -> {0.5, 0}, ChartLayout -> "Grid"]
 

Генерирует что-то близкое к тому, что я хочу (представляя их как папки с файлами, торчащие вверх). Тем не менее, я хочу добавить значимые подсказки. По умолчанию он отображается с частотой. Есть ли быстрый способ также включить имя файла, к которому привязана частота, а также частоту? т.е. всплывающая подсказка, которая выводит ‘007acfa.txt-cleaned.txt — 32’ где в файле 7 появляются 32 вхождения?

Комментарии:

1. Отсутствует ли символ во втором аргументе to Sort при вычислении sortedfrequency ? Кроме того, если вы инициализируете viewerCount# с {} помощью , вам не нужно Take создавать list3 и т. Д…

2. Итак, i -е число в list3 соответствует вхождениям слова в i -м файле?

3. @BrettChampion sortedfrequency Это была избыточная команда — я отредактировал ее, чтобы удалить. Спасибо за Take совет, я знал, что должен быть лучший способ, чем мой.

4. @BrettChampion Да, _i_th номер в list3 соответствует тому, что это _i_th файл — т.Е. седьмой номер в списке3 будет файлом 007acfa.txt-cleaned.txt .

Ответ №1:

В качестве примера предположим, что ваши данные представляют собой что-то вроде

 list3 = RandomInteger[30, 30];
list4 = RandomInteger[30, 30];
filelist = Table["file " <> ToString[i], {i, 30}];
 

Тогда вы могли бы сделать что-то вроде

 BarChart3D[{
  MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] amp;, {filelist, list3}],
  MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] amp;, {filelist, list4}]}, 
 BarSpacing -> {0.5, 0}, ChartLayout -> "Grid"]
 

Редактировать

Другой способ заключается в использовании LabelingFunction :

 BarChart3D[{list3, list4}, 
 LabelingFunction -> 
  (Placed[Row[{filelist[[Last[#2]]], "  -- ", #1}], Tooltip] amp;), 
 ChartLayout -> "Grid", BarSpacing -> {0.5, 0}]
 

Ответ №2:

Это должно сработать:

 BarChart3D[{list3, list4}, 
   ChartLabels -> Placed[filelist, Tooltip],
   ChartLayout -> "Grid",
   BarSpacing -> {0.5, 0}]
 

Редактировать

Забыл, что вы также хотели указать высоту во всплывающей подсказке, для которой вы хотите использовать LabelingFunction . Давайте продолжим и включим также само слово:

 BarChart3D[{list3, list4}, 
   ChartLabels -> {Placed[{word1, word2}, None], Placed[filelist, None]}, 
   ChartLayout -> "Grid", 
   BarSpacing -> {0.5, 0}, 
   LabelingFunction -> (Tooltip[Row[Flatten[{#3, #1}], " - "]] amp;)
   ]