gpt4 book ai didi

python - 如何使 Matplotlib 散点图作为一个整体透明?

转载 作者:太空狗 更新时间:2023-10-29 17:42:47 24 4
gpt4 key购买 nike

我正在使用 Matplotlib(python 3.4.0,matplotlib 1.4.3,在 Linux Mint 17 上运行)制作一些散点图。为每个点单独设置 alpha 透明度非常容易;有什么方法可以将它们设置为一组,以便同一组中的两个重叠点不会改变颜色?

示例代码:

import matplotlib.pyplot as plt
import numpy as np

def points(n=100):
x = np.random.uniform(size=n)
y = np.random.uniform(size=n)
return x, y
x1, y1 = points()
x2, y2 = points()
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111, title="Test scatter")
ax.scatter(x1, y1, s=100, color="blue", alpha=0.5)
ax.scatter(x2, y2, s=100, color="red", alpha=0.5)
fig.savefig("test_scatter.png")

此输出结果:

enter image description here

但我想要更像这样的东西:

enter image description here

我可以通过另存为 SVG 并在 Inkscape 中手动分组,然后设置透明度来解决问题,但我真的更喜欢我可以编码的东西。有什么建议吗?

最佳答案

是的,有趣的问题。你可以用 Shapely 得到这个散点图.这是代码:

import matplotlib.pyplot as plt
import matplotlib.patches as ptc
import numpy as np
from shapely.geometry import Point
from shapely.ops import cascaded_union

n = 100
size = 0.02
alpha = 0.5

def points():
x = np.random.uniform(size=n)
y = np.random.uniform(size=n)
return x, y

x1, y1 = points()
x2, y2 = points()
polygons1 = [Point(x1[i], y1[i]).buffer(size) for i in range(n)]
polygons2 = [Point(x2[i], y2[i]).buffer(size) for i in range(n)]
polygons1 = cascaded_union(polygons1)
polygons2 = cascaded_union(polygons2)

fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111, title="Test scatter")
for polygon1 in polygons1:
polygon1 = ptc.Polygon(np.array(polygon1.exterior), facecolor="red", lw=0, alpha=alpha)
ax.add_patch(polygon1)
for polygon2 in polygons2:
polygon2 = ptc.Polygon(np.array(polygon2.exterior), facecolor="blue", lw=0, alpha=alpha)
ax.add_patch(polygon2)
ax.axis([-0.2, 1.2, -0.2, 1.2])

fig.savefig("test_scatter.png")

结果是:

Test scatter

关于python - 如何使 Matplotlib 散点图作为一个整体透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com