Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Как визуализировать в Экселе очень большую таблицу с двумя входами?

Автор Олег*, 05.10.2012, 00:54

« назад - далее »

Олег*

Добрый день!

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

Таблица с двумя входами, т.е. (если кто не знает)  в самой верхней строке располагаются значения одной независимой переменной (X), в самом первом столбце значения другой независимой переменной (Y), а на пересечении соответствующей строки и столбца находятся значения функции (Z), которая зависит от этих двух переменных.

Теперь передо мной встал вопрос, как бы понагляднее визуализировать это мое "произведение", чтобы было хотя бы в общих чертах :) понятно, каким группам значений переменных соответствуют более высокие и более низкие значения функции. Конечно, один максимум и один минимум найти не составит труда, а вот определить ЗОНЫ максимумов и минимумов - это уже задача посложнее.

Попробовал использовать усл.  форматирование, выделил зеленым цветом 500 максимумов и красным цветом 500 минимумов. Но проблема в том, что вся "картинка" не умещается на экране. Пришлось двигать ползунок в сторону уменьшения масштаба изображения. Вроде бы что-то начало вырисовываться, но комп у меня довольно старенький и медленный, и поэтому стал тормозить довольно прилично. Одним словом, этот метод я отверг.

Разумеется, самое естественное решение этой проблемы - это нарисовать диаграмму, благо в Экселе их очень много видов. Но вот какой из них выбрать?
Диаграмма-то трехмерная нужна. Вроде бы идеально подходит диаграмма поверхности, но когда я "зарядил" в нее эту таблицу, Эксель выплюнул ее со словами: "Отстань от меня. Я строю только диаграммы, в которых не больше 255 рядов".

Одним словом, большая просьба подсказать, как можно все-таки какую-нибудь диаграмму построить (в Экселе или в какой-нибудь другой программе), чтобы можно было как-нибудь наглядно представить себе общую картину полученных данных.

Книгу с таблицей прилагаю.






Муж это единственный зарегенный юзер, а все остальные это хакеры :)

chombi

Вариант с условным форматированием. Прямо в таблице цветом можно выделить.

0mega

Цитата: Олег* от 05.10.2012, 00:54
... ну очень большая :)  (302х534)
Цитата: Олег* от 05.10.2012, 00:54
"...Я строю только диаграммы, в которых не больше 255 рядов".

302 - это больше  чем 255
а 302/2>255 и машина не будет не ругаться  Сделайте 2 таких графика и поставьте рядом

Serge 007

Цитата: Олег* от 05.10.2012, 00:54
...выделил зеленым цветом 500 максимумов и красным цветом 500 минимумов...

...как можно какую-нибудь диаграмму построить (в Экселе или в какой-нибудь другой программе), чтобы можно было как-нибудь наглядно представить себе общую картину полученных данных.
О других приложениях не скажу, но в Excel - никак
Более 256 рядов (255+1 зарезервированный) не получится даже в сводных диаграммах, кроме того тормозить такие диаграммы будут сильно и визуально они не читаемы

ЗЫ Человеческий мозг оптимально воспринимает визуальную информацию о точках экстремума только в том случае, если общее их количество не превышает 7^2, т.е. 49, хотя для меня, например, даже это число очень большое :)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

_Boroda_

Олег, а нарисуйте на небольшом кусочке (допустим, 20х20) что Вы хотели бы видеть. И словами тоже расскажите еще раз - мне, например, не совсем понятно.
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

alex77755

Если я правильно понял, то где-то так:
Могу помочь VB6, VBA
Alex77755@mail.ru

ZORRO2005

Яндекс-деньги: 410011658492153

alex77755

Можно добавить цихерки и придумать дрругой алгоритм раскраски.
Могу помочь VB6, VBA
Alex77755@mail.ru

Олег*

Сразу хочется сказать огромное спасибо, всем кто хочет мне помочь! Я даже не ожидал, что будет так много предложений. Теперь по порядку их поступления :)

Цитата: chombi от 05.10.2012, 16:30
Вариант с условным форматированием. Прямо в таблице цветом можно выделить.

Но это же, в принципе, тот же самый способ, который я описал в топике. Только у меня таблица была еще больше (900x900) и комп тормозил очень сильно, на грани зависания.


Цитата: 0mega от 05.10.2012, 22:13
Цитата: Олег* от 05.10.2012, 00:54
... ну очень большая :)  (302х534)
Цитата: Олег* от 05.10.2012, 00:54
Вроде бы идеально подходит диаграмма поверхности, но когда я "зарядил" в нее эту таблицу, Эксель выплюнул ее со словами: "Отстань от меня. Я строю только диаграммы, в которых не больше 255 рядов".

302 - это больше  чем 255
а 302/2>255 и машина не будет не ругаться  Сделайте 2 таких графика и поставьте рядом

Да была у меня эта идея тоже. Но эта "табличка" :)  ещё маленькая :)  Обычно размер бывает 900x900. Это ж на сколько частей надо будет диаграмму разрезать? Получается на 4 вроде? А как их потом вместе совместить, чтобы было понятно, что к чему? Масштаб-то везде получится разный. Сомневаюсь, что так будет наглядно. Хотя, хотя, хотя...


Цитата: Serge 007 от 05.10.2012, 23:45
ЗЫ Человеческий мозг оптимально воспринимает визуальную информацию о точках экстремума только в том случае, если общее их количество не превышает 7^2, т.е. 49, хотя для меня, например, даже это число очень большое :)

И все-таки хочется найти какой-нибудь оптимальный способ, чтобы сразу можно было разглядеть как "размазался конечный результат" :)  по большому полю всех возможных вариантов комбинации исходных данных.


Цитата: _Boroda_ от 06.10.2012, 02:52
Олег, а нарисуйте на небольшом кусочке (допустим, 20х20) что Вы хотели бы видеть. И словами тоже расскажите еще раз - мне, например, не совсем понятно.

Да мне и самому трудно сказать, что я хочу увидеть :)  Я в творческом поиске :)  И нарисовать не могу, тем более, на небольшом кусочке :)  Исходные данные все время будут разными, таблица тоже все время будет получаться разной, потому-то и хочется найти какой-нибудь способ быстро (а это лучше всего делать при визуальном просмотре) оценивать полученные результаты.


Цитата: ZORRO2005 от 06.10.2012, 16:07
Может такой вариант подойдет?

На самом деле, мне очень понравилось с эстетической точки зрения и с точки зрения исполнения тоже. Уокенбах отдыхает! :) И нервно курит одну за одной! :) Но как это использовать на практике?  В результате получается тот же самый способ, что и способ от 0mega, но только в динамике. Когда начинаю ползунки перемещать, комп тормозит сильно. Если бы не тормозил, то может быть этот способ был бы лучшим.

Цитата: alex77755 от 06.10.2012, 13:46
Если я правильно понял, то где-то так:

Вот этот вариант мне не особо понравился...


Цитата: alex77755 от 06.10.2012, 21:25
Можно добавить циферки и придумать другой алгоритм раскраски.

... а вот от этого получил чисто эстетическое наслаждение, да и просматривается, вроде бы, все вполне наглядно. Может, и правда, остановиться тогда на этом варианте и не искать "черную кошку в темной комнате"?

А как удалось сохранить эту таблицу в формате jpg? Не думаю, что простым захватом картинки с экрана. По крайней мере, у меня вся таблица не видна даже при самом маленьком масштабе. Или у вас монитор "ну очень большой"? :)
И подскажите, пожалуйста, какие вы там делали уставновки в условном форматировании, чтобы получить такой шедевр?

И еще любопытно, что подразумевается под словами "добавить циферки"? С поиском оптимально-наглядного алгоритма раскраски более или менее понятно, а вот как на такой маленький масштаб наложить цифры. Или это имеется в виду, уже на саму картинку jpg накладывать, например, в Paint?
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

Олег*

Ну вот, позади еще одна бессонная ночь, которая не прошла даром :)

В добавление к моему предыдущему посту:

alex77755, кажется, я сообразил, как это было сделано ;)

Вставляем в нашу книгу юзерскую форму, на ней размещаем PictureBox, ну а потом ставим цвет соответствующего пикселя этой картинки в зависимость от того значения, которое имеет соответствующая ячейка в нашей таблице-матрице:

Picture1.PSet (X, Y), <здесь_код_цвета>

Классно придумано! Таким образом можно будет охватить одним взглядом таблицу практически любого размера (раскрасив ее по нашему усмотрению), ну а потом уже рассматривать "под микроскопом" :) по методу ZORRO2005 те участки, которые нас особенно заинтересуют. Именно так и буду действовать! :)

P.S. Сейчас обнаружил, что в VBA, к сожалению,  отсутствует очень удобный "визуально-бейсиковский" метод PSet. Это немного усложняет нашу задачу. Ну что ж, придется еще немного потанцевать с бубном :)
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

alex77755

В принципе да!
Подход почти такой. Только реализован не в VBA, а в VB6.
Пробовал на форме через АПИ, но получается медленно.
Если просто через VB6, то надо что-то делать с сортировкой.
Т.е. что бы найти 500 максимумов и минимумов нужно отсортировать всё в каком-то порядке и взять нужное значение с начала и с конца списка и потом с ними сравнивать. Но простые методы сортировок делают это долго. А больше я не занимался этим вопросом.
Зато ексел делает это довольно быстро. Я написал макрос, который берёт из ячейки А1 количество максимумов-минимумов, считывает в массив таблицу, перегоняет её в одномерный массив, выгружает на новый лист, сортирует в порядке убывания и в порядке возрастания, берёт нужные значения(в данном случае 500 от начала), записывает в ячейку А1 в определённом формате и сохраняет в текстовом формате.
А уже потом программа на бейсике открывает файл и преобразует в графику на пикчуре. А на нём уже можно и точки ставить и цифры
Могу помочь VB6, VBA
Alex77755@mail.ru

Олег*

Цитата: alex77755 от 08.10.2012, 15:11
В принципе да!
Подход почти такой. Только реализован не в VBA, а в VB6.
Пробовал на форме через АПИ, но получается медленно.
Если просто через VB6, то надо что-то делать с сортировкой.
Т.е. что бы найти 500 максимумов и минимумов нужно отсортировать всё в каком-то порядке и взять нужное значение с начала и с конца списка и потом с ними сравнивать. Но простые методы сортировок делают это долго. А больше я не занимался этим вопросом.
Зато ексел делает это довольно быстро. Я написал макрос, который берёт из ячейки А1 количество максимумов-минимумов, считывает в массив таблицу, перегоняет её в одномерный массив, выгружает на новый лист, сортирует в порядке убывания и в порядке возрастания, берёт нужные значения(в данном случае 500 от начала), записывает в ячейку А1 в определённом формате и сохраняет в текстовом формате.
А уже потом программа на бейсике открывает файл и преобразует в графику на пикчуре. А на нём уже можно и точки ставить и цифры


У меня тоже сейчас был сложный выбор, делать все в Экселе, преодолевая все возникающие на этом пути трудности, или все-таки часть работы переложить на плечи VB6. Решил остановиться на первом варианте. Очень смутно представляю себе передачу данных из Экселя в VB-ешный PictureBox. Конечно, идея использовать для этого текстовый файл меня тоже посещала, но уж очень смутно представляю себе трансляцию данных из текстового файла на PictureBox. А здесь (в Экселе) все уже в таблице готовое к употреблению :)

Сейчас уже не жалею, что все решил делать в самом Экселе. АПИ-шная функция SetPixel отображает на юзерскую форму всю таблицу (приблизительно 600 на 800) всего за 5 минут. На самом деле, не так уж и долго, учитывая почтенные размеры таблицы и почтенный возраст моего далеко не мощного (по современным меркам) компьютера.
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

Poltava

А можно будет полюбоваться результатами, уж очень хочется посчупать
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.