绘制图表时像素和记录之间的关系

3

使用 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个记录吗?把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轴方向上。
1个回答

3
您发布的代码无法运行。至少没有一个 x 可以执行 len() 操作。因此,代码应该像这样:
import matplotlib.pyplot as plt

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

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

但这样只是画了一条线。
在此输入图片描述

即使您有一台19200像素的显示器,您仍然会在每个像素中看到一个带点的线。
在此输入图片描述

所以我想你实际上指的是这样的:

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 单色版本:
enter image description here 你可以在这里玩耍:here 由于图像比1920更小,所以我调整了L来使它们在随机数据上更加生动。 更新: 第一组像素中有3个点。第二组中有一个点。
图像:[img] 你在第三组中看到了多少个点?
如果你的视力好,屏幕大,你会看到有2个点。
但是如果你的视力不好,屏幕小或者你离屏幕远一些呢?你仍然能说出有多少个点吗?可以! 在某种程度上,当然是。如果你离屏幕1公里远,你可能看不到屏幕本身:) 但是你怎么知道?通过组的重量 - 它看起来比第一组,比第二组
现在,把下一张图像给别人看,并告诉他第一组有三个像素。然后问:其他组中有多少个像素?
图像:[img] 他们可能会告诉你这些组中有2个和1个像素。 但这不是真的。它们有相同数量的像素。唯一的区别是这些像素具有不同的颜色
所以,实际上绘制多少像素并不重要。重要的是它们的感知方式。
但更重要的是...你说“像素”,但它是点吗?不!在大多数情况下,有 3个不同颜色的点

enter image description here

因此,如果你看到一个红色像素,就可以确定有一个点被点亮了。如果你看到黄色,则有两个点被点亮。通过颜色,甚至可以准确地说出构成该像素的哪些点被突出显示。

但是,这真的很重要吗?如果你只是说:“这种特定的颜色表示(0,1)(1,1)(2,1),而这种特定的颜色表示(3,1)(4,1)等”,人们将理解你的情节,而不管监视器和它们的分辨率如何。

但是,更重要的是:当你在显示器上绘制像素时,它甚至不是单独的物理像素,也不仅仅是三个点。你的显示器具有最大分辨率为8192 * 8192...因此,在分辨率为1920 * 1080的逻辑上,对于一个物理像素,会有超过8个物理像素。这实际上为一个逻辑上的像素提供了超过16个物理像素。所以你能不能

把10条记录放进一个盒子里?

...正如你所看到的,“盒子”相当大。你可以在里面放16条记录。 物理上。而在逻辑上,你甚至可以添加更多。


这意味着有19200对数据记录(x,y)需要绘制,但最多只有1920对数据记录实际显示在监视器上,我说得对吗? - showkey
不,那些不是一对,而是三元组:(x, y, n) * 1920,其中n从1到10。1920*10 - >19200。例如,使用图像4所示的方法(给定长度为1920的画布),实际上会绘制19200个像素。 - x00
在我的情况下,绘制十对(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轴方向上,每个像素仅绘制一对(x,y)数据记录,因为x轴方向上只有1920个像素,所以你需要19200个像素。 - showkey
用1个像素画10对。更新了答案。或者我真的不明白你在问什么。 - x00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接