科研绘图
目录
Matplotlib 中的中文显示
一般情况下,matplotlib 无法直接显示中文,需要通过设置字体来实现。 可以使用Clarmy/mplfonts: Fonts manager for matplotlib (github.com)便捷地解决这个问题。
首先,在命令行中进行安装和设置:
# 1. 安装
pip install mplfonts
# 2. 设置
mplfonts init
之后,即可在python代码中使用指定的中文字体:
from mplfonts import use_font
use_font('Noto Serif CJK SC')
# 其他绘图代码
- Noto Sans Mono CJK SC:Noto等宽黑体
- Noto Serif CJK SC:Noto宋体
- Noto Sans CJK SC:Noto黑体
- Source Han Serif SC:思源宋体
- Source Han Mono SC:思源等宽宋体
在 Matplotlib 中匹配数据点和拟合线的颜色
在使用 Matplotlib 绘制数据时,为了图表的清晰度和美观性,常常希望数据点和相应的拟合线使用相同的颜色。 这里介绍一种简洁且高效的方法,利用 Matplotlib 的内置功能,实现颜色的自动匹配而无需硬编码。
示例代码
import random
import numpy as np
import matplotlib.pyplot as plt
import scienceplots
plt.style.use('science')
# 生成数据
x1 = range(10)
y1 = [x + random.randint(1, 2) for x in x1]
y1_fit = np.polyfit(x1, y1, 1)
x2 = range(-2, 8)
y2 = [x + random.randint(1, 5) for x in x2]
y2_fit = np.polyfit(x2, y2, 1)
# 绘制数据点
plt.plot(x1, y1, 'o', label='data 1')
plt.plot(x2, y2, 'o', label='data 2')
# 获取当前图形中所有线的颜色
colors = [line.get_color() for line in plt.gca().lines]
# 使用相同的颜色绘制拟合线
plt.plot(x1, np.polyval(y1_fit, x1), '--', color=colors[0], label='fit 1')
plt.plot(x2, np.polyval(y2_fit, x2), '--', color=colors[1], label='fit 2')
plt.legend()
plt.show()
核心代码解释
在这段代码中,关键部分是如何获取并使用颜色:
# 获取当前图形中所有线的颜色
colors = [line.get_color() for line in plt.gca().lines]
这一行通过列表推导从当前轴(gca()
返回的对象)的 lines
属性中提取每条线的颜色。
由于 plt.plot
默认按顺序使用颜色循环中的颜色,这种方法可以确保拟合线使用与相对应数据点相同的颜色。