如何保存matplotlib或seaborn绘制的图像(可以设置dpi)?

本文介绍了如何使用matplotlib的savefig函数在Python中保存seaborn绘制的图像,并设置DPI以获得高清晰度图片。通过示例展示了如何加载数据,绘制箱式图,并以不同格式和DPI保存图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近我制作了一个 seaborn可视化教程,播放之后收到一位同学的提问:学了教程后知道怎么用 seaborn 绘图了,那么,绘图之后如何保存图片呢?能不能在保存时设置图片的 dpi 值?

对于第一个问题,我之前用过的保存图片方法是:

  • 截屏:使用Snipaste软件或电脑截图工具,详细操作方法欢迎阅读我的文章:Windows 截屏,你用过哪些方法?
  • 或者将运行之后(有绘图结果)的 Jupyter Notebook 文件存成 Markdown 文档:在菜单栏依次选择:File>Download as >Markdown(.md),生成的 Markdown 文档会带有导出的图片。

但是,第二个问题需要设置 dpi 值,那么, dpi 是什么呢?

DPI ( Dots Per Inch,每英寸点数)是一个度量单位,指每英寸长度上可显示或输出点的数量。DPI 参数一般用于衡量打印机、鼠标等设备的分辨率。具体来说,dpi 值越高,分辨率越高,图片就越清晰。

如何在保存图片时设置 dpi 值呢?

在网上查找了一下,发现要用到 matplotlib 中的 savefig 函数。使用语句plt.savefig("图片名",dpi=设置值)可以保存并导出相应分辨率的图片(. png格式),在 Jupyter Notebook 文件所在的文件夹中就能看到。如果要保存成其它格式,如 .svg, .jpg 或 .pdf,把格式写在文件名后即可,如:plt.savefig("图片名.svg",dpi=设置值)

下面我们通过一个具体的例子实践一下:

首先引用相应的库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

加载 seaborn 自带的一个数据集,这个数据集记录了企鹅的一些特征,可以用于判断企鹅种类:

penguin_df=sns.load_dataset("penguins")

然后,绘制数据集的变量"bill_length_mm"(企鹅的嘴长)的箱式图,并且保存图片,设置 dpi 值为300:

sns.boxplot(data=penguin_df,x="bill_length_mm")
plt.savefig("boxplot01",dpi=300)

savefig 函数默认保存图片为 .png 格式,与plt.savefig("boxplot01.png",dpi=300)效果相同。

我们还可以将绘图保存为 .jpg 或 .svg 或 .pdf 格式,以及设置需要的dpi 值,比如:

sns.boxplot(data=penguin_df,x="bill_length_mm")
plt.savefig("boxplot01.jpg",dpi=150)
plt.savefig("boxplot02.svg",dpi=300)
plt.savefig("boxplot03.pdf",dpi=600)

下面这张图就是上面的几个输出结果之一,哈哈,猜猜是哪一个呢?效果真不错,你也快去试试吧!

使用savefig函数保存的图片
使用savefig函数保存的图

参考文章:

1.DPI:https://baike.baidu.com/item/DPI/908073

2.plt.savefig() 函数:Python之matplotlib基础

### 如何使用 Matplotlib 绘制发散图 发散图是一种用于展示数据点之间差异的图形,通常通过颜色大小的变化来表示数值偏离某个中心值的程度。以下是实现这一功能的具体方法: #### 设置环境参数 为了确保绘图美观且一致,可以通过 `plt.rcParams` 和 `sns.set_style()` 来设置全局样式。 ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns large = 22; med = 16; small = 12 params = { 'axes.titlesize': large, 'legend.fontsize': med, 'figure.figsize': (16, 10), 'axes.labelsize': med, 'axes.titlesize': med, 'xtick.labelsize': med, 'ytick.labelsize': med, 'figure.titlesize': large } plt.rcParams.update(params) plt.style.use('seaborn-whitegrid') sns.set_style("white") %matplotlib inline ``` #### 创建示例数据集 假设我们有一组正负偏差的数据,可以用来绘制发散图。 ```python np.random.seed(42) # 固定随机种子以获得可重复的结果 data = np.random.randn(50).cumsum() categories = ['Category A' if val >= 0 else 'Category B' for val in data] df = pd.DataFrame({ 'Value': data, 'Category': categories }) ``` #### 使用颜色区分正负区域 利用 Seaborn 的调色板者自定义颜色方案,可以根据数据值自动调整颜色。 ```python colors = df['Value'].apply(lambda x: '#d7191c' if x < 0 else '#2b83ba') plt.figure(figsize=(16, 10)) plt.bar(range(len(df)), df['Value'], color=colors) # 添加装饰 plt.axhline(0, color="black", linewidth=2, linestyle="--") # 基准线 plt.title('Diverging Bar Chart Example', fontsize=22) plt.xlabel('Index', fontsize=med) plt.ylabel('Values', fontsize=med) plt.xticks(fontsize=small) plt.yticks(fontsize=small) plt.grid(True, which='both', linestyle='--', linewidth=0.5) plt.tight_layout() plt.show() ``` 这段代码展示了如何创建一个简单的发散条形图,并通过颜色突出显示正值和负值部分[^1]。 #### 进一步增强效果 如果希望增加更多视觉层次感,比如渐变填充其他细节,则可以引入额外库支持(如 SciencePlots joypy)。例如,下面是一个带有平滑过渡背景的例子: ```python from scipy.interpolate import make_interp_spline x_new = np.linspace(df.index.min(), df.index.max(), 300) spl = make_interp_spline(df.index, df['Value'], k=3) smooth_values = spl(x_new) with plt.style.context(['science', 'no-latex']): fig, ax = plt.subplots(figsize=(16, 10)) ax.fill_between( x_new, smooth_values, where=(smooth_values > 0), interpolate=True, color='#2b83ba' ) ax.fill_between( x_new, smooth_values, where=(smooth_values <= 0), interpolate=True, color='#d7191c' ) ax.axhline(0, color="black", linewidth=2, linestyle="--") ax.set_title('Smooth Diverging Area Chart with SciencePlots Style', fontsize=22) ax.set_xlabel('Index', fontsize=med) ax.set_ylabel('Values', fontsize=med) fig.savefig('diverging_area_chart.png', dpi=300) ``` 此脚本不仅实现了基本的功能需求,还借助插值函数使线条更加流畅自然[^4]。 --- ### 总结 以上介绍了两种方式来完成发散型图表的设计——一种是基础版柱状结构;另一种则加入了高级特性处理后的面积形式呈现。两者均能有效表达数据间的对比关系,具体选用取决于实际应用场景和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值