Использование подсказок BarChart [], чтобы проиллюстрировать, откуда поступают данные - PullRequest
2 голосов
/ 31 октября 2011

В настоящее время я визуализирую частоту слов и фраз в большой базе текстовой информации (приблизительно 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, 0, 100, 2, 0, 0, 0,10, 1, 7, 0, 0, 0, 0, 23, 3, 0, 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, 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 вхождения?

Ответы [ 2 ]

6 голосов
/ 31 октября 2011

В качестве примера предположим, что ваши данные похожи на

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

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

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

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

Другой способ - использовать LabelingFunction:

BarChart3D[{list3, list4}, 
 LabelingFunction -> 
  (Placed[Row[{filelist[[Last[#2]]], "  -- ", #1}], Tooltip] &), 
 ChartLayout -> "Grid", BarSpacing -> {0.5, 0}]
3 голосов
/ 31 октября 2011

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

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}], " - "]] &)
   ]
...