【问题标题】:Why is matplotlib of a circle producing color gradient along circle edges?为什么圆形的matplotlib会沿圆形边缘产生颜色渐变?
【发布时间】:2017-02-27 19:53:00
【问题描述】:

我在 python v2.7 上使用 matplotlib(不确定版本)来生成包含圆圈的图像,以用于 OOF2 分析。圆圈需要具有完全由相同 RGB 值 (#000000) 组成的像素,但是当生成圆圈时,边缘周围会出现一圈“灰色”。 coll_intra = matplotlib.collections.PatchCollection(circle_intra, facecolors='black', edgecolors='black')

在“黑色”和“无”之间更改边缘颜色会产生效果,但不会将值设置为绝对相等。
周围有“灰色”环的圆圈:

有没有办法在我的脚本中调整它,还是我需要在另一个程序中强制它? (例如 MSPaint)。

【问题讨论】:

  • 也许我遗漏了一些东西,但我没有在您的图像中看到任何灰环。这些“人工制品”是在现场图还是在保存的图像中产生的?这看起来很像“更改”图像(重新缩放、转换等)时平滑操作的效果。还要检查你的屏幕是否没有使用某种特殊的过滤器(我之所以这么说是因为我真的没有看到任何灰环,它都是黑白的)。

标签: python css matplotlib


【解决方案1】:

由于抗锯齿,图片中可能会出现一些灰色。
必须区分 matplotlib 执行的抗锯齿和图像查看器(例如浏览器)中可能存在的抗锯齿。

关于 matplotlib,可以通过设置 antialiased = False 来关闭抗锯齿功能。大多数艺术家和收藏确实有这个选项。所以在这种情况下

PatchCollection(...,antialiased=False)

会成功的。

要观察差异,请考虑以下脚本。将antialiased 设置为True(这是默认设置)会在图片中输出121 种不同的灰度,而将其设置为False 则只剩下2 个(黑白)。

antialiased=True:

antialiased=False:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib.collections import PatchCollection

antialiased=False

N = 3
x = [1,2];y=[1,1]
radii = [0.5,.4]
patches = []
for x1, y1, r in zip(x, y, radii):
    patches.append(Circle((x1, y1), r))

coll_intra = PatchCollection(patches, facecolors='black', edgecolors='black',antialiased=antialiased)

fig, ax = plt.subplots(figsize=(2,1))
ax.set_aspect("equal")
ax.axis("off")
ax.set_xlim([0,3])
ax.set_ylim([0,2])
ax.add_collection(coll_intra)


#count the number of different colors
#https://stackoverflow.com/questions/7821518/matplotlib-save-plot-to-numpy-array
#https://stackoverflow.com/questions/40433211/how-can-i-get-the-pixel-colors-in-matplotlib
fig.canvas.draw()
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape((int(len(data)/3), 3))
data = np.vstack({tuple(row) for row in data})

print len(data) # prints 121 for antialiased=True
                    #          2 for antialiased=False

plt.show()

(计算颜色的方法改编自thisthis问题。)

【讨论】:

  • 非常感谢,这正好解决了我的问题。
  • 很高兴听到这个消息。如果这回答了您的问题,请考虑 accepting 并对其进行投票,否则请随时完善您的问题。
猜你喜欢
  • 2016-05-26
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2017-03-04
  • 2018-02-12
  • 2010-12-31
相关资源
最近更新 更多