Как стать автором
Обновить

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

мне бывает нужно, чтобы 2 графика имели одинаковый масштаб по x и y, при этом размеры axes у них в см одинаковые, при этом сам размер картинки тоже одинаковый. В excel такое сделать невозможно, только если скопировать картинку и туда вставить новые данные и молиться, чтобы ничего не сдвинулось. в matplotlib хоть и есть кое какой инструмент, приходится подбирать и писать громоздкую обертку. пока другие работают дальше и не парятся, я борюсь за красоту графиков

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

в matplotlib хоть и есть кое какой инструмент, приходится подбирать и писать громоздкую обертку.

Если код по ссылке https://matplotlib.org/stable/gallery/axes_grid1/demo_fixed_size_axes.html решает вашу задачу, то разве от громоздкий? Ну и несколько еще вариантов тут: https://stackoverflow.com/questions/44970010/axes-class-set-explicitly-size-width-height-of-axes-in-given-units

пока другие работают дальше и не парятся, я борюсь за красоту графиков

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

Я так переводил отчёт большой из экселя в matplitlib. Код (ужасный! кривой! не поддающийся рефакторингу), нужный для красоты графиков, занимал 80% обьема.

Ну, покажите пример? И код, и результат.

НЛО прилетело и опубликовало эту надпись здесь

Как по мне, хорошее приложение не состоит из HTML'я целиком, а опирается на всю мощь нативного кода под капотом. Например, обращается к EDID. (Вот пример для использования в Windows-сборках, интересно, есть ли кросс-платформенный эквивалент). Один раз пришлось делать нечто отдалённо похожее, в CSS я использовал нестандартную единицу, привязанную к физическим размерам, а в скриптах — функцию, опирающуюся на kx и ky, значения которым присваивал из нативной части при запуске приложения.

Только вот веб-приложению выполнить нативный код никто не даст

Да еще и EDID бывает кривой. Лучше уж спрашивать у ОС, у них свои костыли на этот случай есть.

Да, бывает, что и такое надо кровь из носу. Например, приложение не проходит чёртову цензуру в AppStore. Там и тригонометрию вспомнишь, и всё на свете.

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

У меня всегда window.devicePixelRatio == 1. А еще точнее, текущий зуум страницы / 100.

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

Физический размер к этому показателю не имеет отношения. Значение 1 означает, что выбранное разрешение для видяхи (логистический пиксель) в точности соответствует разрешению дисплея (физический пиксель — который светится). А отличаться от 1 оно будет в том случае, если на дисплее, скажем, 1024х768 выводить изображение другого разрешения

Я этого и имел ввиду. Но это никак не поможет нарисовать квадрат с точными физическими размерами.

Значение 1 означает, что для CSS media query реальное разрешение экрана будет применяться также и для квери. Например, для типичного телефона с разрешением 1080x1920 devicePixelRatio == 2.75, и CSS будет воспринимать это разрешение как 393x721 и соответственно показывать мобильный вариант страницы. Ничего общего с физическими пикселями и дисплеем это значение не имеет

Осталось узнать физический размер физического пикселя. И поскольку он будет в линиях (1/12 пункта pt, который 1/12 от дюйма, но это неточно), ещё нужно будет умножить на магическую константу, которая в Китае в пи раз выше, чем в Европе.

Свойство devicePixelRatio - это отношение количества реальных пикселей на пиксель в CSS. Если оно больше 1, то мы можем понять, что у нас экран с большой плотностью пикселей. Это может быть полезно знать, чтобы пользователям грузить картинки или рендерить канвас в высоком разрешении. Но это не имеет никакого отношения к физическому размеру пикселей. Количество и размер - вещи перпендикулярные. Поэтому в контексте задачи это свойство никак не поможет узнать реальный размер элементов.

Я опустил этот момент. Но да, devicePixelRatio не здесь не помощник

Краткое содержание:

Как точно нарисовать квадрат 3х3? Попросить пользователя линейкой измерить диагональ и ввести в поле. А мы знаем супер формулу.

В общем математика - сила, а статья... ну такая.

Попросить пользователя вспомнить/погуглить самую известную характеристику дисплея и ввести в поле как привязку реального мира к виртуальному. Это другое

Осталось верить, что производитель не округлил 21.05 дюймов до 21 или 20.98 до 21.

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

Тогда вопрос, а решена ли задача вообще и нужен ли такой пердоллинг, когда можно попросить пользователя приложить линейку к экрану и ткнуть мышкой в две точки?

Приложить линейку сложнее, чем погуглить "смартфон-нейм" и в первом же заголовке увидеть диагональ

Так и не увидел в статье ни одного трёхсантиметрового квадрата.

Что помешало привести в статье результат - тот самый красный квадрат 3 см?

А ваш "Его величество код" нарисовал у меня вот такое.

В общем, не зачёт.

Подход основан на диагонали экрана. У вас диагональ не указана

Как показать, что ты невнимательно читал, не говоря, что ты невнимательно читал)

"Мысью по древу", "мысью"...

Крылатой фразой стала именно ошибочная цитата, такое бывает (те же «Люк, я твой отец», «Я устал, я ухожу» и пр.)

А для принтеров в далёком 20 веке придумали постскрипт

Для принтеров и CSS-стандарт предписывает, чтобы CSS-пиксели отсчитывались как 1/96 физического дюйма, а не наоборот

Как этот код отработает с экраном 2×2 см?

И другие анекдоты из серии тестировщика в баре

Мне другой анекдот напомнило, там ветеринар приходит к доктору.

Скрытый текст

Приходит ветеринар к доктору.
- На что жалуетесь?
- Нет, ну так каждый дурак может!

Еще про совместимость с Internet Explorer 6 вообще забыли, где полифиллы на всякие флексы и клампы?

А как на нём отработает пользователь? 🙂

Ничего политического, честно, просто как пример:

Ну, понятно что для этой задачи это скорее шутка, но для квадрата в 5 см уже найдется девайс, в который такой квадрат не влезет, и это стоит держать в голове при написании

На мой взгляд отличная подготовка для создания баг реквеста в проектах Firefox и Chrome или в чем вы тестировали.

А на элт это все сломается, потому что там есть такое понятие, как "видимая область"

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

А кто будет измерять? Пользователь перед входом на сайт?

Ясное дело, что вообще то о чем эта статья, на регулярном сайте не нужно и даже вредно. Пользователь и диагональ своего экрана скорее всего не знает и не станет вводить.

монитором в 24 дюйма может быть что-то с реальной матрицей 23,6, 23,8, 24, 24,5 дюймов

У меня в качестве дисплея подключен ЭЛТ монитор (проектор, телевизор). Вопрос какого размера у меня квадрат? Квадрат ли он?
ИМХО, стать я ни о чем.

Если есть ширина и высота, в чём проблема по той же теореме Пифагора диагональ вычислить? Зачем поле ввода городить. Я, например, не скажу диагональ ни телефона, ни монитора слёту... Вижу, что я не догоняю чего-то, но в вебе пользователь не будет тыкать лишнего, всё само должно работать...

Ну если ставить задачу, как распечатать на принтере - то если нарисовать в Фотошопе или любом сапре квадратик 3 на 3, то он и при печати окажется 3 на 3, если выставить масштаб 100%, то размер совпадет с реальным, по крайней мере в фотошопе я сама печатала и сравнивала. Случай с печатью совсем притянут за уши, чтобы городить такое в вебе..

Зарегистрируйтесь на Хабре, чтобы оставить комментарий