【问题标题】:Relationship between pixel and record on plotting a graph绘制图形时像素与记录之间的关系
【发布时间】:2020-04-12 09:01:51
【问题描述】:

使用 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*+

xaxis 中只有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)记录,x轴方向需要19200像素。

【问题讨论】:

    标签: plot pixel record xrandr


    【解决方案1】:

    您发布的代码没有运行。至少没有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()
    

    在一个非常大的显示器上它看起来像这样:

    当然,您不能在一个像素中显示单独的点,但您可以显示有多少点适合一个特定的像素。只需为您的情节添加另一个维度。

    由于您的绘图只是一条线,并且您并没有真正使用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()
    

    它给出:

    单色版:

    你可以玩here

    由于图像比 1920 年更小,我使用 L 播放,以使它们在随机数据上更加生动。

    更新:

    第一组像素中有3个点。并且第二点有一点。

    图片:

    你在第三组中看到多少分?

    如果你视力好,屏幕大,你会看到有 2 点。

    但是,如果您的视力不佳、屏幕很小,或者您只是远离屏幕,该怎么办。你还能说出有多少分吗?是的,你可以!

    在某种程度上,当然。如果您站在距离屏幕 1 公里的地方,您可能无法看到屏幕本身 :)

    但是你怎么知道呢?按组的重量 - 它看起来比第一个,比第二个

    现在,向某人展示下一张图片,并告诉他们第一组有树像素。然后问:其他组有多少像素?

    图片:

    他们可能会告诉您这些组中有 2 个和 1 个像素。 但事实并非如此。有相同数量的像素。唯一的区别是这些像素有不同的颜色

    因此,绘制多少像素并不重要。重要的是他们的看法。

    但不仅如此......你说“像素”,但它是一个点吗?不! 大多数情况3个点不同颜色。

    因此,如果您看到一个红色像素,您可以确定有一个点变亮了。如果您看到黄色 - 有 2 个点变亮。等等。 通过颜色判断,您甚至可以准确地说出构成像素的哪些点被突出显示。

    但是,这真的很重要吗?如果你只是说:“这个特定的颜色意味着 (0,1)(1,1)(2,1),而这个特定的颜色意味着 (3,1)(4,1) 等等。”不管显示器和分辨率如何,人们都会理解你的情节。

    但是,同样,不止于此:当您在显示器上绘制一个像素时,它甚至不是一个物理像素,而不仅仅是 3 个点。您的显示器的最大分辨率为 8192 * 8192 ......所以一个逻辑分辨率为 1920 * 1080 的物理像素超过 8 个。这实际上为一个逻辑提供了超过 16 个物理像素。你也可以

    将 10 条记录放在一个盒子里?

    ...如您所见,“盒子”相当大。您可以将 16 条记录放入其中。 物理上。而且逻辑上你可以添加更多。

    【讨论】:

    • 这意味着有19200对数据记录(x,y)要绘制,但最多只有1920对数据记录真正显示在显示器上,对吗?
    • 不,这些不是对,而是三元组:(x, y, n) * 1920,其中n 是从1 到10。1920*10 - > 19200。例如,使用图像 4 上显示的方法(给定 1920 长度的画布),基本上将绘制 19200 个像素。
    • 绘制十对(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)记录,x轴方向需要19200像素。
    • 1 像素 绘制 10 对。更新了答案。或者我真的不明白你在问什么。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2018-09-02
    相关资源
    最近更新 更多