Связь между пикселем и записью при построении графика - PullRequest
3 голосов
/ 12 апреля 2020

Получите информацию моего монитора с помощью 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 пикселей, только 1920 крошечных прямоугольников.

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 записей в одну коробку? Десять различных записей данных в одном пикселе? Как один пиксель express десять записей?

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

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.

1 Ответ

3 голосов
/ 16 апреля 2020

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

import matplotlib.pyplot as plt

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

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

Но таким образом, это просто dr aws строка.
enter image description here

Даже если вы Если бы у вас был монитор с 19200 пикселями, вы все равно увидите линию с точкой в ​​каждом пикселе.
enter image description here

Так что, я полагаю, вы действительно имели в виду примерно так:

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()

На очень большом мониторе это будет выглядеть так:
enter image description here

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

Поскольку ваш график - это просто линия , и вы действительно не используете ось 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()

Это даст:
enter image description here

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

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

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()

Это дает:
enter image description here

Mono chrome версия:
enter image description here

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

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

Обновление:

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

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

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

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

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

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

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

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

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

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

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

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

enter image description here

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

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

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

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

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

...