我正在按照教程生成点的散点图,按簇着色,并根据每个点在其各自簇中的成员资格强度进行颜色饱和。 我提到了着色细节,以防它们影响分辨率,但我怀疑它们不会。
我发现,如果我增加 PyPlot 图形的 DPI,图形的大小会增加,但仍然非常模糊。 下面是我的测试代码,它生成一个小 DPI 数字和一个大 DPI 数字。 后者似乎仍然异常模糊。 造成这种情况的原因是什么以及如何获得清晰的图? 我正在使用 Spyder。
# Adapted from:
# https://hdbscan.readthedocs.io/en/latest/advanced_hdbscan.html
# Generate plot data
#-------------------
import numpy as np
data = np.load('clusterable_data.npy') # https://github.com/lmcinnes/hdbscan/blob/master/notebooks/clusterable_data.npy
import hdbscan
clusterer = hdbscan.HDBSCAN(min_cluster_size=15).fit(data)
import seaborn as sns
color_palette = sns.color_palette( 'deep',
len( np.unique( clusterer.labels_ ) ) )
cluster_colors = [color_palette[x] if x >= 0
else (0.5, 0.5, 0.5)
for x in clusterer.labels_]
cluster_member_colors = [sns.desaturate(x, p) for x, p in
zip(cluster_colors, clusterer.probabilities_)]
# Plot the scatter graph
#-----------------------
%matplotlib tk
# To get separate window in Spyder
import matplotlib.pyplot as plt
plt.close('all')
# Low resolution
plt.rcParams['figure.dpi']=50
plt.scatter(*data.T, s=50, linewidth=0, c=cluster_member_colors, alpha=0.25)
# High resolution
plt.rcParams['figure.dpi']=150
plt.figure()
plt.scatter(*data.T, s=50, linewidth=0, c=cluster_member_colors, alpha=0.25)
正在增加数字的 DPI,而不是点的 DPI。需要增加点的大小 (由
s
控制) 或减少所绘制点的数量。以下是一些可以尝试的选项:
1. 增加点大小:
可以尝试增加
plt.scatter
中的
s
参数,使点更大。例如,将
s
从 50 增加到 100:
python
plt.scatter(*data.T, s=100, linewidth=0, c=cluster_member_colors, alpha=0.25)
2. 减少点数量:
如果有太多点,它们可能会显得拥挤和模糊。可以通过对数据进行子采样来减少绘制的点数。例如,可以绘制数据的每 10 个点:
python
plt.scatter(*data.T[:, ::10], s=50, linewidth=0, c=cluster_member_colors[::10], alpha=0.25)
3. 使用不同的后端:
一些用户报告说,使用不同的 Matplotlib 后端可以改善分辨率。可以尝试使用
Qt5Agg
后端:
python
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
4. 将图形保存为矢量格式:
如果需要将图形用于出版物或其他需要高质量输出的用途,则可以考虑将图形保存为矢量格式,例如 PDF 或 SVG。矢量图形可以无限缩放而不会损失分辨率。
python
plt.savefig('my_figure.pdf')
通过试验这些选项,应该能够生成清晰的散点图,即使在高 DPI 设置下也是如此。
标签:python,matplotlib,spyder From: 78789977