【发布时间】:2020-03-23 17:13:23
【问题描述】:
我正在创建大约 10000 个点的 matplotlib 散点图。在我使用的点大小下,这会导致过度绘制,即某些点将被绘制在它们上面的点隐藏。
虽然我不介意看不到隐藏点这一事实,但当我将图形以 pdf(或其他矢量格式)写入磁盘时,它们会被冗余写出,从而导致文件很大。
有没有办法创建只将可见点写入文件的矢量图像?这类似于照片编辑软件中“拼合”/合并图层的概念。 (我仍然喜欢将图像保留为矢量,因为我希望能够放大)。
示例图:
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
random.seed(15)
df = pd.DataFrame({'x': np.random.normal(10, 1.2, 10000),
'y': np.random.normal(10, 1.2, 10000),
'color' : np.random.normal(10, 1.2, 10000)})
df.plot(kind = "scatter", x = "x", y = "y", c = "color", s = 80, cmap = "RdBu_r")
plt.show()
【问题讨论】:
-
保存图时可以通过
dpi关键字降低图像质量。实际上,这不是您问题的直接答案,但如果问题是文件的重量,这可能是一个简单的解决方案。 -
@AlessandroPeca 但它不再是矢量图形了,是吗?
-
DPI 对于矢量输出毫无意义。关于这个问题,计算起来会很昂贵。您可以将数据转换为英寸(或点)单位,这样您就可以使用 sqrt(80)/2 的半径以点为单位进行算术运算。然后,您需要找到一种廉价的方法来定义“重叠”,这种方法不需要检查一个点与每个其他点的每个组合。
-
@ImportanceOfBeingErnest 这似乎是一个很好的解决方案。鉴于我经常遇到这个问题,我想知道这是否已经在某个地方实现了?
标签: python-3.x matplotlib plot