【问题标题】:Rendering issue with matplotlib in python2python2中matplotlib的渲染问题
【发布时间】:2017-04-11 10:38:18
【问题描述】:

我需要一个程序在矩阵中绘制倾斜的平行线。这是我的 python2 代码:

import numpy as np
from pylab import imshow, show

X, Y, m, s = 500, 1000, 8, 200        
x = np.zeros((Y, X)) 
c = -m * Y              
for i in xrange(Y):
    for j in xrange(X):               
        k = 0                         
        while k * s < 2 * m * Y:
            if i == m * j + c + s * k:
                x[i][j] = 1
            k += 1
imshow(x, aspect='auto'); show()

生成的图片是: 没有理由缺少中间的块。我放大了他们丢失的第一个区域,我发现这些点确实在那里:

为了确保点应该是这样的,下面是原始图像渲染点的区域:

这是渲染问题还是我做错了什么?

【问题讨论】:

  • np.rollaxis(np.array(np.where(x == 1)), 1) 给出array([[ 0, 0], [ 0, 25], [ 0, 50], ..., [992, 449], [992, 474], [992, 499]])。你的数据应该是这样的吗?

标签: python python-2.7 matplotlib graphics


【解决方案1】:

问题是,将 1000 个像素值放置到 370 个屏幕像素上时会产生什么结果。每个像素大约有 3 个值,两个蓝色,一个黄色。最后的像素应该是哪种颜色?

您可以做的是在图像上使用插值以及颜色图,该颜色图对于大于 0 的任何值都显示相同的颜色。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

X, Y, m, s = 500, 1000, 8, 200        
x = np.zeros((Y, X)) 
c = -m * Y 

for i in xrange(Y):
    for j in xrange(X):               
        k = 0                         
        while k * s < 2 * m * Y:
            if i == m * j + c + s * k:
                x[i][j] = 1
            k += 1

clist = ((0, "w"), (1./255, "crimson"), (1, "crimson"))
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("n",clist)
plt.imshow(x, aspect='auto', cmap=cmap,interpolation="bilinear"); 
plt.colorbar()
plt.show() 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2023-03-30
    • 2020-10-18
    相关资源
    最近更新 更多