Связь между пикселем и записью при построении графика

Получите информацию о моем мониторе с помощью xrandr.

xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
VGA-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080     60.00*+

На оси x всего 1920 пикселя, всего 4_ крошечных прямоугольников.

import matplotlib.pyplot as plt
y = 1*19200
x = range(0,len(x))
plt.scatter(x,y)
plt.show()

Я рисую горизонтальную линию, содержащую 19200 пар записей. На оси x всего 1920 пикселей, как поместить 19200 элементов в 1920 ящиков?
Отрисовывает ли один пиксель 10 x записей? Поместить 10 записей в одну коробку? Десять различных записей данных всего в одном пикселе? Как один пиксель может выразить десять записей?

Исправьте все мои опечатки:

import matplotlib.pyplot as plt
y = [1]*19200
x = range(0,len(y))
plt.scatter(x,y)
plt.show()

Это означает, что нужно отрисовать 19200 пар записей данных (x,y), но в этом случае на мониторе действительно отображается не более 1920 пар записей данных?
Сколько пикселей нужно отобразить из десяти пар (x, y) запись данных: (0,1), (1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7, 1),(8,1),(9,1) в моем случае? С моей точки зрения, только один пиксель для рисования записи данных десяти пар (x, y), то есть только одна запись данных пары (x, y) была нарисована в один пиксель, в направлении оси x, есть только 1920 пикселей, один пиксель рисует одну пару записей (x, y), вам нужно 19200 пикселей в направлении оси x.


person showkey    schedule 12.04.2020    source источник


Ответы (1)


Код, который вы разместили, не работает. По крайней мере, нет x, из которых можно было бы взять len(). Так что, вероятно, это должно выглядеть так:

import matplotlib.pyplot as plt

y = [1]*19200
x = range(0,19200)

plt.scatter(x,y)
plt.show()

Но таким образом он просто рисует линию.
введите здесь описание изображения

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

Итак, я полагаю, вы на самом деле имели в виду что-то вроде этого:

import matplotlib.pyplot as plt
import numpy as np

L = 19200

y = [1]*L
x = [v*(i+1) for i, v in enumerate(np.random.randint(0,2,L))]

plt.scatter(x,y,alpha=0.5)
plt.show()

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

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

Поскольку ваш график представляет собой просто линию, и вы на самом деле не используете ось y, вы можете использовать ее как дополнительное измерение:

x = np.random.randint(0,2,size=(L,10))
y = np.sum(x,axis=1)
x = range(0,L)

plt.fill_between(x,y, alpha=0.5)
plt.show()

Это даст:
введите здесь описание изображения

Высота полосы представляет количество точек в пикселе.

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

x = np.random.randint(0,2,size=(L,10))
colors = [[(1,1,1),(0,0,1),(0,0.5,1),(0,1,1),(0,1,0.5),(0,1,0),(0.5,1,0),(1,1,0),(1,0.5,0),(1,0,0)][v] for v in np.sum(x,axis=1)]
# or if your prefer monochrome
# colors = [(1,0,0,v/10) for v in np.sum(x,axis=1)]
x = range(0,L)
y = [1]*L

plt.scatter(x,y, c=colors, s=3)
plt.show()

Это дает:
введите здесь описание изображения

Монохромная версия:
введите здесь описание изображения

Вы можете поиграть с ним здесь

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

Обновление:

В первой группе пикселей 3 точки. И есть один момент во втором.

Изображение: [img]

Сколько очков вы видите в третьей группе?

Если у вас хорошее зрение и большой экран вы увидите, что там 2 точки.

Но что, если у вас плохое зрение, маленький экран или если вы просто отойдете от экрана. Можете ли вы еще сказать, сколько очков там? Да, ты можешь!

В какой-то степени, конечно. Если вы будете стоять в 1 км от экрана, вы, вероятно, не сможете увидеть сам экран :)

Но как вы можете сказать? По весу группы - выглядит светлее, чем первая и темнее, чем вторая.

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

Изображение: [img]

Они, вероятно, скажут вам, что в этой группе есть 2 и 1 пиксель. Но это не так. Имеется одинаковое количество пикселей. Единственное отличие состоит в том, что эти пиксели имеют разный цвет.

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

Но более того... Вы говорите "пиксель", а это точка? Нет! В большинстве случаев есть 3 точки разного цвета.

введите здесь описание изображения

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

Но опять же - так ли это важно? Если вы просто скажете: «этот конкретный цвет означает (0,1)(1,1)(2,1), а этот конкретный цвет означает (3,1)(4,1) и т. д.». люди поймут ваш сюжет вне зависимости от мониторов и их разрешений.

Но, опять же, более того: когда вы рисуете пиксель на своем мониторе, это даже не один физический пиксель и не просто 3 точки. Ваш монитор имеет максимальное разрешение 8192*8192... так что больше 8 физических пикселей на один логический при разрешении 1920*1080. А это реально дает более 16 физических пикселей на один логический. Так ты можешь

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

...как видите, "коробка" довольно большая. Вы можете поместить в него 16 записей. Физически. И логически вы можете добавить еще больше.

person x00    schedule 16.04.2020
comment
Это означает, что нужно отрисовать 19200 пар записей данных (x,y), но на самом деле на мониторе отображается не более 1920 пар записей данных, я прав? - person showkey; 17.04.2020
comment
Нет, это не пары, а тройки: (x, y, n) * 1920, где n от 1 до 10. 1920*10 - ›19200. Например, при подходе, показанном на изображении 4 (при длине холста 1920), будет закрашено по существу 19200 пикселей. - person x00; 17.04.2020
comment
Сколько пикселей рисовать десять пар (x, y) записи данных: (0,1), (1,1), (2,1), (3,1), (4,1), (5,1) ),(6,1),(7,1),(8,1),(9,1) в моем случае? С моей точки зрения, только один пиксель для рисования записи данных десяти пар (x, y), то есть только одна запись данных пары (x, y) была нарисована в один пиксель, в направлении оси x, есть только 1920 пикселей, один пиксель рисует одну пару записей (x, y), вам нужно 19200 пикселей в направлении оси x. - person showkey; 17.04.2020
comment
1 пиксель для рисования 10 пар. Обновил ответ. Или я не совсем понимаю, о чем вы спрашиваете. - person x00; 18.04.2020