为什么圆的matplotlib沿圆边产生颜色渐变?

时间:2017-02-27 06:59:33

标签: python css matplotlib

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

更改' black'之间的边缘颜色并且没有'有效,但不会将值设置为绝对相等 圈子有"灰色"他们周围:
Circles with rings of "grey" around them.

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

1 个答案:

答案 0 :(得分:0)

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

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

PatchCollection(...,antialiased=False)

会做到这一点。

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

antialiased=True
enter image description here
antialiased=False
enter image description here

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问题。)