Что такое масштабирование. Что такое масштаб? Виды масштабов. Просмотр изображений и видео

Каждый бизнес должен развиваться. Это позволяет компании занимать лидирующие позиции на рынке. Крупное предприятие становится более устойчивым к воздействию негативных факторов окружающей среды. Для этого проводится масштабирование бизнеса. Существует несколько основных способов развития компании. О них будет рассказано далее.

Особенности масштабирования

Услуги по масштабированию бизнеса в Краснодаре, Москве, Санкт-Петербурге и других городах нашей страны предоставляют многие компании. Существует множество тренингов, программ обучений, которые помогают бизнесменам освоить теорию управления своими компаниями.

Проводить процедуру масштабирования можно несколькими способами. Существуют разные подходы к расширению бизнеса. На основе мирового опыта в этой сфере появились наиболее распространенные механизмы развития компаний разных отраслей. При этом крайне не рекомендуется принимать решения на основе своих личных убеждений и понятий. Бизнес не любит неоправданного риска. Только правильные действия позволяют удерживать организации лидерские позиции в отрасли.

Компания дает стабильную прибыль, когда она быстро реагирует на меняющиеся условия окружения. При этом крупные организации могут легко избежать негативных последствий влияния неблагоприятных факторов окружающей среды. Поэтому стартап нужно грамотно масштабировать.

Пути расширения

Сегодня существует множество способов масштабировать свою организацию. Для этого следует пойти одним из нескольких путей. Чаще всего владельцы небольшого стартапа начинают осваивать новые каналы сбыта, разрабатывают и изготавливают новые продукты. Также популярным способом масштабирования является клонирование своего бизнеса. К этой категории относится лицензирование или франчайзинг.

Некоторые организации решают проводить расширение путем ведения агрессивной маркетинговой политики, изменения стратегии продаж. Также является эффективным методом оптимизация бизнес-процессов, разработка и внедрение инноваций.

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

Освоение новых методов и каналов продаж

Масштабирование бизнеса (в Краснодаре, Екатеринбурге, Москве и прочих городах нашей страны - не суть важно) проводится разными способами. При этом учитываются особенности конкретного рынка. Существуют компании, которые имеют региональное значение. Их продукция не может выйти на всероссийский или мировой уровень. Чтобы занять место на таких рынках проводится освоение новых каналов продаж или продуктов, которые раньше не выпускались конкретной компанией. Для этого фирма расширяет свои территории сбыта путем реализации посредством сети интернет, на рынках крупных городов по всей стране и т. д. Также компания может направить свои ресурсы на занятие соседних ниш на рынке, привлечение новых партнеров, клиентов.

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

Клонирование бизнеса

Отзывы об академии масштабирования бизнеса SalePlane говорят о большом опыте этой компании в проведении расширения путем клонирования. При этом представленная организация работает в области фрайчазинга. Клонирование бизнеса также может проводиться путем лицензирования.

При проведении франшизы другим компаниям предоставляется право работать под существующим брендом. Лицензия же дает право иной организации получить в свое распоряжение готовую модель бизнеса. При этом можно модернизировать такую модель бизнеса по своему усмотрению.

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

Популярность франшизы

Клонирование является одним из самых популярных способов масштабирования бизнеса в розничной торговле. «Создаем франчайзинг за 45 дней» - такое утверждение можно встретить в компании SalePlane. И это не преувеличение. Франчайзинг имеет множество преимуществ. Поэтому его в большинстве случаев выбирают для расширения бизнеса.

Франшиза позволяет создать широкую региональную сеть при минимальном уровне начальных инвестиций. При этом с поставщиками заключают договора на оптимальных условиях. Этот подход к расширению бизнеса привлекает новые идеи франчайзи.

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

Агрессивный маркетинг

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

Агрессивный маркетинг предполагает выделение большого количества денег на проведение рекламы, повышение влияния на целевую аудиторию. При этом компания действует последовательно. Агрессивность метода заключается в проведении прямой рекламы и влияние с ее помощью на сознание покупателей. Они выбирают тот товар, о котором они знают. При этом необходимо провести креативную рекламную кампанию.

Компания ведет себя навязчиво, побуждая покупателей приобрести именно их продукцию. Следует учесть, что результат такого влияния является моментальным и кратковременным. При этом последствия такого агрессивного воздействия могут быть как положительными, так и отрицательными. Во втором случае целевая аудитория выражает свое недовольство подобным воздействием, принципиально отказываясь приобретать навязанный товар.

Стратегии увеличения продаж

Каждая единица масштабирования в бизнесе должна принимать адекватные решения о необходимости проведения расширения, а также о выборе правильных методик. Прежде чем проводить клонирование бизнеса или агрессивный маркетинг, компания должна демонстрировать стабильную прибыль. Она должна проводить политику в области повышения уровня своей прибыли.

Для этого применяется одна из двух стратегий для увеличения объема продаж. В рамках первой из них проводится улучшение процесса продаж. При этом стоимость продукции увеличивается. Бренд и продуманная маркетинговая политика играют важную роль в этом процессе.

Вторая стратегия предполагает снижение себестоимости. При этом пересматривается технологический цикл. Издержки производства снижаются путем внедрения современных методов, материалов, инноваций. С поставщиками сырья заключаются более выгодные договоры. Это позволяет нарастить объем производства, предлагать потребителю более выгодную продукцию.

Оптимизация бизнес-процессов

Масштабирование бизнеса может быть проведено посредством оптимизации процессов управления, производства и т. д. Эта процедура проводится в несколько этапов. Сначала компания должна осуществить аудит актуальной бизнес-структуры.

Далее на основе полученных данных делается вывод о соответствии деятельности компании стратегическим задачам. Если же находятся несоответствия, принимаются решения, разрабатываются комплексы мероприятий по устранению негативных факторов развития организации. При этом выявляются проблемные зоны производства, продаж и логистики.

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

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

Когда расширять бизнес?

Начинают направлять инвестиции в масштабирование бизнеса на определенном моменте деятельности компании. Важно начать эту процедуру не слишком рано и не слишком поздно. Сначала проводится анализ темпов роста компании. При этом учитывают особенности отрасли, в которой действует компания.

Американские экономисты сходятся во мнении, что задуматься о расширении своего бизнеса стоит на этапе, когда уровень увеличения прибыли составляет около 6% в неделю. Но лучше всего начинать подобную деятельность, когда компания показывает рост прибыли 10% в неделю.

При этом нужно мыслить масштабно. Принимать решения о расширении сети нужно после тщательного анализа своих возможностей, условий деловой среды. При этом увеличить доход можно в разы. Для этого важно проводить всесторонний анализ, на основе которого принимаются стратегические решения. Важно выбрать оптимальные способы расширения бизнеса в существующих условиях.

Масштабирование бизнеса проводится на определенном этапе деятельности компании. Чтобы подготовить ее к расширению, необходимо работать над повышением имиджа организации. При этом нужно инвестировать средства в сотрудников. От их работы будет зависеть успешность предприятия.

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

Масштаб мышления

Чтобы создать успешную компанию, которая сможет охватить своим влиянием не только региональные, но и федеральные, зарубежные рынки, нужно мыслить масштабно. Не стоит чрезмерно фокусировать внимание на мелочах. Например, не стоит тратить драгоценное время на установление идеальной дисциплины сотрудников. Проще провести его в переговорах со стратегическими партнерами.

Зная, как провести масштабирование бизнеса, можно создать успешную компанию, которая будет прибыльной и стабильной.

) Здравствуйте! Я Александр Макаров, и вы можете меня знать по фреймворку «Yii» — я один из его разработчиков. У меня также есть full-time работа — и это уже не стартап — Stay.com, который занимается путешествиями.

Сегодня я буду рассказывать про горизонтальное масштабирование, но в очень-очень общих словах.

Что такое масштабирование, вообще? Это возможность увеличить производительность проекта за минимальное время путем добавления ресурсов.

Обычно масштабирование подразумевает не переписывание кода, а либо добавление серверов, либо наращивание ресурсов существующего. По этому типу выделяют вертикальное и горизонтальное масштабирование.

Вертикальное — это когда добавляют больше оперативки, дисков и т.д. на уже существующий сервер, а горизонтальное — это когда ставят больше серверов в дата-центры, и сервера там уже как-то взаимодействуют.

Самый классный вопрос, который задают, — а зачем оно надо, если у меня все и на одном сервере прекрасно работает? На самом-то деле, надо проверить, что будет. Т.е., сейчас оно работает, но что будет потом? Есть две замечательные утилиты — ab и siege, которые как бы нагоняют тучу пользователей конкурента, которые начинают долбить сервер, пытаются запросить странички, послать какие-то запросы. Вы должны указать, что им делать, а утилиты формируют такие вот отчеты:

Главные два параметра: n — количество запросов, которые надо сделать, с — количество одновременных запросов. Таким образом они проверяют конкурентность.

На выходе получаем RPS, т.е. количество запросов в секунду, которое способен обработать сервер, из чего станет понятно, сколько пользователей он может выдержать. Все, конечно, зависит от проекта, бывает по-разному, но обычно это требует внимания.

Есть еще один параметр — Response time — время ответа, за которое в среднем сервер отдал страничку. Оно бывает разное, но известно, что около 300 мс — это норма, а что выше — уже не очень хорошо, потому что эти 300 мс отрабатывает сервер, к этому прибавляются еще 300-600 мс, которые отрабатывает клиент, т.е. пока все загрузится — стили, картинки и остальное — тоже проходит время.

Бывает, что на самом деле пока и не надо заботиться о масштабировании — идем на сервер, обновляем PHP, получаем 40% прироста производительности и все круто. Далее настраиваем Opcache, тюним его. Opcache, кстати, тюнится так же, как и APC, скриптом, который можно найти в репозитории у Расмуса Лердорфа и который показывает хиты и мисы, где хиты — это сколько раз PHP пошел в кэш, а мисы — сколько раз он пошел в файловую систему доставать файлики. Если прогнать весь сайт, либо запустить туда какой-то краулер по ссылкам, либо вручную потыкать, то у нас будет статистика по этим хитам и мисам. Если хитов 100%, а мисов — 0%, значит, все нормально, а если есть мисы, то надо выделить больше памяти, чтобы весь наш код влез в Opcache. Это частая ошибка, которую допускают — вроде Opcache есть, но что-то не работает…

Еще часто начинают масштабировать, но не смотрят, вообще, из-за чего все работает медленно. Чаще всего лезем в базу, смотрим — индексов нет, ставим индексы — все сразу залетало, еще на 2 года хватит, красота!

Ну, еще надо включить кэш, заменить apache на nginx и php-fpm, чтобы сэкономить память. Будет все классно.

Все перечисленное достаточно просто и дает вам время. Время на то, что когда-то этого станет мало, и к этому уже сейчас надо готовиться.

Как, вообще, понять, в чем проблема? Либо у вас уже настал highload, а это не обязательно какое-то бешеное число запросов и т.д., это, когда у вас проект не справляется с нагрузкой, и тривиальными способами это уже не решается. Надо расти либо вширь, либо вверх. Надо что-то делать и, скорее всего, на это мало времени, что-то надо придумывать.

Первое правило — никогда ничего нельзя делать вслепую, т.е. нам нужен отличный мониторинг. Сначала мы выигрываем время на какой-то очевидной оптимизации типа включения кэша или кэширования Главной и т.п. Потом настраиваем мониторинг, он нам показывает, чего не хватает. И все это повторяется многократно – останавливать мониторинг и доработку никогда нельзя.

Что может показать мониторинг? Мы можем упереться в диск, т.е. в файловую систему, в память, в процессор, в сеть… И может быть такое, что, вроде бы, все более-менее, но какие-то ошибки валятся. Все это разрешается по-разному. Можно проблему, допустим, с диском решить добавлением нового диска в тот же сервер, а можно поставить второй сервер, который будет заниматься только файлами.

На что нужно обращать внимание прямо сейчас при мониторинге? Это:

  1. доступность, т.е. жив сервер, вообще, или нет;
  2. нехватка ресурсов диска, процессора и т.д.;
  3. ошибки.
Как это все мониторить?

Вот список замечательных инструментов, которые позволяют мониторить ресурсы и показывать результаты в очень удобном виде:

Этот доклад - расшифровка одного из лучших выступлений на обучающей конференции разработчиков высоконагруженных систем за 2015 год.

Старьё! - скажите вы.
- Вечные ценности! - ответим мы.

  • highload junior
  • Добавить метки

    Всем дарова. Сегодня будем говорить о непонятном, а именно о том что такое Масштабирование ГП AMD. По названию понятно что масштабирование, но чего именно? ГП это наверно GP, что означает графический процессор. Короче я не буду гадать, я полетел в интернет, там поищу инфу. Ребята, первая инфа уже есть. Вроде бы это подгонка разрешения игр под разрешение моника. Короче вроде как штука полезная, но нужно проверять на деле, чтобы картинка была не размытой и была комфортная для восприятия. То есть нужно включать Масштабирование ГП, потом отключить, сравнивать, короч экспериментировать типа…

    Толком понять не могу что такое Масштабирование ГП. Но понял точно, если моник не совсем стандартный или даже игра какая-то заумная, то по бокам могут быть черные полосы, ну знаете? Ну вот Масштабирование ГП это вроде может исправить, но как? А вот тут я не знаю, оно может картинку растянуть, но качественно это делается или нет, это нужно проверять…

    Ребята, я понял только одно, что Масштабирование ГП может помочь когда есть какие-то траблы с разрешением. Например в игре полосы черные по бокам. Особого определения в интернете что это мне не удалось найти, извиняйте.

    Так ребята, дальше ищу инфу, ибо немного нужно разобраться все таки что это. Значит вот один чел пишет, что если включать Масштабирование ГП, то картинка становится лучше, чем если включать Выполнять масштабирование на Дисплей. Вот еще один чел пишет, что проблем с растянутостью нет никакой, во многих мониках есть опция как отображать: во весь экран или в формате. И тут чел пишет еще, что там где такой опции нет, то там можно включить Масштабирование ГП. То есть опять же, Масштабирование ГП это что-то типа подгонки игры под моник, чтобы игра заполняла весь моник и чтобы не было черных полос по бокам. Я все понял именно так, но может я ошибаюсь….

    Вот один чел на форуме Steam пишет что он раньше играл с видюхой NVIDIA и мог растянуть разрешение, а теперь у него стоит видюха AMD и он не может растянуть разрешение. И вот один чел чему отвечает, что бы он включил Масштабирование ГП. Так что вывод снова делаем такой, что Масштабирование ГП это для растягивания разрешения.

    Вот нашел картинку, знаю что тут плоховато видно, за это сори, но здесь вроде отображена именно эта настройка Масштабирование ГП, смотрите:

    Ребята, больше не знаю что сказать. Я понял одно, что Масштабирование ГП это опция чтобы химичить с разрешением, когда в игре по бокам черные полосы. Включать опцию или нет, это все зависит от вашего игрового процесса, если полос нет, то включать не нужно, а если есть, то можно попробовать, может станет лучше. На этом все, удачи вам ребята и позитива!

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

    Масштабируемость - важный аспект электронных систем, программных комплексов , систем баз данных , маршрутизаторов , сетей и т. п., если для них требуется возможность работать под большой нагрузкой. Система называется масштабируемой , если она способна увеличивать производительность пропорционально дополнительным ресурсам. Масштабируемость можно оценить через отношение прироста производительности системы к приросту используемых ресурсов. Чем ближе это отношение к единице, тем лучше. Также под масштабируемостью понимается возможность наращивания дополнительных ресурсов без структурных изменений центрального узла системы.

    В системе с плохой масштабируемостью добавление ресурсов приводит лишь к незначительному повышению производительности, а с некоторого «порогового» момента добавление ресурсов не даёт никакого полезного эффекта.

    Вертикальное и

    Вертикальное масштабирование

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

    Горизонтальное масштабирование

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

    Показатели

    См. также

    Примечания

    Ссылки


    "Масштабирование - это функция, которая преобразует входной набор данных в выходной набор в заданном диапазоне."

    Значения в любом наборе данных вряд ли будут соответствовать в точности для вашей визуализации. Масштабирование обеспечивает удобный способ сопоставления входного набора данных и данных, которые будут участвовать в вашей визуализации.

    Масштабированием в D3 занимаются функции, параметры которых определяете именно вы. Однажды создав функцию масштабирования, вы ее вызываете каждый раз каждый раз, когда получаете набор данных, а она вам возвращает красиво масштабированные выходные значения. Вы можете определить и не одну такую функцию.

    Возможно, это очень заманчиво думать, что масштабирование - это что-то визуальное, появляющееся на окончательном изображении, как, например, набор делений с указанием последовательности значений. Не обманывайте себя! Эти метки являются частью оси, являющиеся, по сути, наглядным воплощением масштабирования. Масштабирование - это математическое отношение, без конкретного визуального представления. Я призываю вас считать масштабирование и наглядное представление на осях взаимосвязанными, но все же разными понятиями.

    Это все касается линейного масштабирования, так как это самое простое и понятное. Однако, поняв принцип, вы сможете легко понять и нелинейное масштабирование.

    Яблоки и пиксели

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

    Var dataset = [ 100, 200, 300, 400, 500 ];

    Сначала хорошая новость: каждый месяц ларек продает на сто яблок больше, чем в предыдущем месяце! Взрывной бизнес. Чтобы продемонстрировать этот успех, вы хотите сделать столбиковую диаграмму, иллюстрирующую крутой подъем продажи яблок, где каждому значению проданных яблок соответствует высота одного из столбиков на диаграмме.

    До сих пор, мы использовали значения данных напрямую в визуальных параметрах. Так, если было продано 500 яблок, соответствующий столбик будет 500 пикселей в высоту.

    Это может сработать, но что насчет следующего месяца, когда будут проданы 600 яблок? А годом позже, когда будет продано 1800 яблок? Ваша аудитория должна будет приобретать дисплеи большего размера, только для того, чтобы видеть всю высоту этих ваших столбиков с проданными яблоками!

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

    Области и диапазоны

    Входная область данных для масштабируемой функции является диапазоном допустимых входных значений. Учитывая пример с яблоками выше, соответствующая входная область будет либо 100-500(минимальное и максимальное значение набора данных), либо 0-500.

    Выходной диапазон в масштабируемой функции - это диапазон возможных выходных значений, обычно используемый для вывода на дисплей в пикселях. Выходной диапазон выбирается полностью на ваше усмотрение. Если вы решите, что самый низкий столбик с яблоками будет 10 пикселей в высоту, а самый высокий 350 пикселей, то вы можете установить выходной диапазон 10 и 350 пикселей.

    Например, сделаем масштабирующую функцию с входной областью данных 100-500, и выходной диапазон значений. Если бы вы дали нашей функции на вход 100, но выходе получили бы 10. Если бы вы дали на вход 500, но выходе получили бы 350. Если на входе 300, то на выходе 180 получите и распишитесь(300 - это середина входной области данных, а 180 середина выходного диапазона).

    Мы можем отобразить входную область данных и выходной диапазон значений так:

    Input domain 100 300 500 10 180 350 Output range

    Еще одна вещь: не стоит путать эти два понятия входной диапазон данных и выходной диапазон значений.

    Нормализация

    Если вы знакомы с концепцией нормализации, может быть полезным вам знать, как все происходит в нашем примере на самом деле.

    Нормализацией является процесс преобразования числовых значений в новые значения в диапазоне от 0 до 1, основываясь на минимальном и максимальном начальных значениях. Например, в году 365 дней. 310й день в году это около 0.85 года, или если в процентах, то 85%.

    Если масштабирование является линейным, мы используем D3 и позволяем ему управлять математическим процессом нормализации. Входные значения нормализуются в соответствии с входной областью значений, а далее нормализованные значения масштабируются в выходной диапазон.

    Реализуем масштабирование

    Генератор масштабируемых функций в D3 доступен по адресу d3.scale , где далее указываете необходимую вам масштабируемую функцию.

    Var scale = d3.scale.linear();

    Мои поздравления! Теперь scale - это функция, через которую вы можете пропускать входные значения(Помните, в JavaScript переменные могут хранить также и функции).

    Scale(2.5); //Returns 2.5

    Так как у нас нет еще входной области значений и выходного диапазона значений, эта функция масштабирует входные значения к выходным в пропорции 1:1. Это значит, что какое бы значение мы ни передали в функцию, она вернет его же.

    Мы можем задать входную область значений 100-500, передавая эти значения в метод domain() в качестве массива:

    Scale.domain();

    Также мы устанавливаем выходной диапазон вызовом метода range() :

    Scale.range();

    Эти шаги могут быть сделаны отдельно, как сделаны выше, или мы можем использовать цепочки вызовов:

    Var scale = d3.scale.linear() .domain() .range();

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

    Scale(100); //Returns 10 scale(300); //Returns 180 scale(500); //Returns 350

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

    Масштабируем точечную диаграмму

    Давайте посмотрим на наш набор данных для точечной диаграммы:

    Var dataset = [ , , , , , , , , , ];

    Вспомните, что набор данных представляет из себя массив массивов. Мы использовали первое значение в каждом массиве как координату х , а второе значение, как координату y . Давайте начнем с оси x .

    Если долго пялиться на наш набор данных, можно сделать вывод, что значения х варьируются от 5 и до 480, поэтому вполне резонно сделать для них входную область значений 0-500, так?

    Почему вы на меня так смотрите? Ааа, потому что вы хотите, чтобы ваш код был гибким и масштабируемым, чтобы он работал, даже если наши данные изменятся в будущем. Умно!

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

    D3.max(dataset, function(d) { //Returns 480 return d; //References first value in each sub-array });

    Соберем наш код вместе и получим масштабирующую функцию для оси x :

    Var xScale = d3.scale.linear() .domain() .range();

    Во-первых, заметьте, что я назвал эту функцию xScale . Конечно, вы можете назвать вашу масштабирующую функцию как вы захотите, но текущее название позволяет нам помнить, что делает наша функция.

    Во-вторых, заметьте, что для минимального значения области входных значений я выставил 0(Еще можно использовать метод min() аналогично тому, как мы использовали max ). Максимальным значением области входных значений является максимальное значение в нашем наборе данных(которое равно 480).

    И в конечном итоге, я установил выходной диапазон значений 0-w , то есть ширина нашего SVG.

    Мы будем использовать точно такой же подход для создания масштабируемой функции для оси y :

    Var yScale = d3.scale.linear() .domain() .range();

    Обратите внимание что метод max() ссылается на d , координату y нашего подмассива. Также максимальным значением выходного диапазона(метод range() ) выставлено h вместо w .

    Масштабирующие функции готовы! Теперь все что нам надо - это использовать их. Просто изменим код, где мы создавали круг для каждого элемента нашего набора данных:

    Attr("cx", function(d) { return d; })

    и изменим его, используя масштабирующую функцию:

    Attr("cx", function(d) { return xScale(d); })

    Повторим этот подход и для оси y . Заменим старый код:

    Attr("cy", function(d) { return d; })

    Attr("cy", function(d) { return yScale(d); })

    Теперь сделаем такие же изменения в тех местах, где мы устанавливаем координаты для текстовых меток. Так, старый код ниже:

    Attr("x", function(d) { return d; }) .attr("y", function(d) { return d; })

    превращается в:

    Attr("x", function(d) { return xScale(d); }) .attr("y", function(d) { return yScale(d); })

    Смотрим на результат рабочего кодa . На взгляд, результат разочаровывает, поскольку уж сильно похож на нашу оригинальную точечную диаграмму. Хотя мы достигли куда большего прогресса, чем мы видим.

    Переработка диаграммы

    Возможно, вы заметили, что меньшие значения y расположены в верхней части диаграммы, а большие значения y расположены ближе к низу. Теперь, так как мы используем масштабирующую функцию, супер просто поменять расположение больших и маленьких значений местами: чтобы большие значения были расположены в верхней части диаграммы, как можно было бы и ожидать. Мы просто изменим выходной диапазон для yScale , меняя:

    Range();

    Range();

    Да, теперь меньшим значениям y на входе соответствуют большие значения y на выходе, тем самым получается эффект, которого мы добивались. Я знаю, это так легко!

    Так как некоторые элементы изображения обрезаются, введем переменную отступа от краев:

    Var padding = 20;

    Теперь мы включим эту переменную в расчет диапазона выходных значений как по оси x , так и по оси y . Раньше xScale был range() , теперь:

    Range();

    Раньше yScale был range() , теперь:

    Range();

    Теперь у нас есть в запасе 20 пикселей сверху, снизу, слева, справа SVG-элемента, которые не берутся в расчет. И готово!


    Но текстовые метки справа до сих пор могут обрезаться. Тогда, я просто увеличу отступ справа в два раза:

    Range();

    Лучше. Но есть еще одно изменение, которое я бы хотел сделать. Вместо того, чтобы рассчитывать радиус каждого круга как квадратный корень от значения y (что вообще бесполезное, в контексте текущей задачи, занятие), почему бы не создать еще одну функцию масштабирования?

    Var rScale = d3.scale.linear() .domain() .range();

    Потом устанавливаю радиус круга таким образом:

    Attr("r", function(d) { return rScale(d); });

    Мы теперь гарантируем, что наши значения радиуса будут находиться в диапазоне значений 2-5(или почти всегда. Смотрите ссылку на метод clamp() ниже). Так, значения 0(минимальное число в области входных значений) будут иметь окружность радиусом 2 пикселя(или диаметр 4 пикселя), а очень большим значениям будут соответствовать круги с радиусом 5(диаметром 10) пикселей.


    Вуаля! Наша первая масштабирующая функция, которая не участвует в расчете координат.

    И в конце, в случае, если сила нашей масштабирующей функции не взорвала ваше воображение, я бы хотел добавить еще один массив в наш начальный набор данных:


    Бум! Обратите внимание, как все старые значения сохраняют свои позиции, но сместились немного ближе друг к другу, вниз и влево, чтобы было место новому значению.

    А теперь, последнее откровение: сейчас мы можем очень просто изменить размер нашего SVG, и все будет смасштабировано самостоятельно. Здесь, я увеличил переменную h с 100 до 300, и больше никаких изменений не сделал:


    И снова, бум! Рабочий пример обновленного кода. Надеюсь, вы видите это и осознаете: больше не будет бессонных ночей, проведенных за модификацией кода только потому что клиент решил, что график должен быть в ширину 800 пикселей вместо задуманных 600. Да, вы будете спать благодаря мне(и блестящим встроенным методам D3)! Быть хорошо отдохнувшим - это конкурентное преимущество. Вы можете меня поблагодарить позже.

    Другие методы

    d3.scale.linear() имеет несколько других удобных методов, которые заслуживают краткого упоминания здесь:

    • nice() - он говорит масштабирующей функции принять все что угодно в качестве выходного диапазона и расширить этот диапазон в обе стороны до ближайшего округленного значения. Выдержка из wiki D3: "Например, для области входных данных , метод вернет ". Это удобно для людей, кому сложно читать цифры, подобные этой: 0.20147987687960267.
    • rangeRound() - используйте этот метод вместе range() , и все выходные значения масштабирующей функции будут округлены до ближайшего целого числа. Этот метод полезен случае, когда вам нужны фигуры с точными значениями пикселей, чтобы избежать нечетких краев, которые могут возникнуть при сглаживании.
    • clamp() - по-умолчанию, линейное масштабирование может возвращать значения вне указанного выходного диапазона. Например, если дано значение, находящееся за пределами входной области значений, масштабирующая функция также вернет значение, расположенное вне диапазоны выходных значений. Если вызвать метод .clamp(true)
    • quantize - линейная функция масштабирования с дискретными значениями выходного диапазона.
    • quantile - аналогична функции выше, но дискретными значениями на входной области значений.
    • ordinal - порядковое масштабирование использует не количественные значения(как категории имен) на выходе; подходит для сравнения яблок с апельсинами.
    Вверх