首页 > 编程问答 >高 DPI 下的 PyPlot 绘图更大,但仍然模糊

高 DPI 下的 PyPlot 绘图更大,但仍然模糊

时间:2024-07-25 06:23:51浏览次数:12  
标签:python matplotlib spyder

我正在按照教程生成点的散点图,按簇着色,并根据每个点在其各自簇中的成员资格强度进行颜色饱和。 我提到了着色细节,以防它们影响分辨率,但我怀疑它们不会。

我发现,如果我增加 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)

enter image description here


正在增加数字的 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

相关文章

  • 使用 python Flask 发送邮件中的图像
    我想发送一封包含html代码和图像的电子邮件但在gmail中它说图像已附加,我不想要这样,我只想要电子邮件正文中的图像。html_content=f"<imgsrc="cid:banner"alt=""style="width:80%;">"msg=MIMEMultipart('related')html_part=MIMEText(html_c......
  • 在 python requests modul 中,如何检查页面是否使用“POST”方法或“GET”方法
    如何使用python“requests”模块检查页面是否使用“GET”方法或“POST”方法。我期望输出为True或False,或者GET或Post预期代码:importrequestsurl=f"www.get_example.com"response=requests.get(url)ifresponse.check_get==True:print("get")你......
  • VS Code Python - 如果括号(括号、大括号等)未关闭,内联建议不起作用
    我遇到的问题是,当我在未闭合的括号或方括号“内部”开始变量名称时,VSCode将不会显示任何建议。但是,如果在键入变量名称之前闭合括号,则建议效果很好。如果我可以避免它,我宁愿不将自动完成括号关闭设置为True也不使用TabOut扩展。第一个屏幕截图显示建议在闭括号/方......
  • 在 Azure 上部署代码时使用 Python 的多处理模块是否有意义?
    我们的团队在Azure机器学习(AML)上部署了一个Python脚本来处理存储在Azure存储帐户上的文件。我们的管道由一个ForEach活动组成,该活动调用每个或列出的文件的Python脚本。从Azure数据工厂(ADF)运行它会触发多个单独的管道同时运行......
  • 我已成功安装 pypdf2 但无法将其导入到我的 python 文件中
    我已经成功安装了pypdf2模块,但在导入它时,我发现该模块丢失了。我尝试使用fromPyPDF2importPdfReader导入,但它不起作用此问题的各种解决方案是什么?在尝试导入PyPDF2时遇到问题。以下是可能导致此问题的一些常见原因和解决方案:安......
  • Python3打开图片时请求ConnectionResetError(10054)
    我试图从'http://xxx.jpg'之类的网站下载图片。代码:headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.139Safari/537.36'}url='http://xxx.jpg'resp......
  • Jupyter Notebook 环境中的 Python 版本不匹配
    我遇到Jupyter笔记本启动横幅中报告的Python版本与我在笔记本中查询python--version时显示的版本之间的差异。启动横幅指示Python3.11.9,但是当我运行!python--version时,它返回Python3.11.7。我所做的步骤:basecondahas3.11.7versio......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 任意几行代码要成为Python中的函数需要什么?
    我正在上一门计算机科学课,我的任务是创建一个程序来实现一个带有参数的函数。我的老师告诉我,下面的代码不是一个函数,这让我很困惑,对于将某些代码行归类为“函数”所需的条件,我感到很困惑。defgame(numbers,max_turns,pfl,tgl):turns=0flag=Falseprint("You......
  • 如何使用 Python 创建新的 Azure 订阅?
    我正在尝试使用PythonSDK以编程方式创建新的Azure订阅。我发现的对AzurePythonSDK的唯一引用是这个这是我最终得到的结果:importazure.mgmt.billingimportazure.mgmt.subscriptioncreds=AzureCliCredential()client_name='test'defcreat......