使用matplotlib怎么在一张图片中绘制两个不重叠的正弦函数,他们的水平线不同
时间: 2023-06-15 16:06:33 浏览: 173
可以使用`subplot`方法在同一张图片中创建两个不重叠的子图,并在每个子图中绘制一个正弦函数。
下面是一个示例代码:
```python
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 4*np.pi, 100)
y1 = np.sin(x)
y2 = np.sin(x - np.pi/2)
# 创建画布和子图
fig, (ax1, ax2) = plt.subplots(2, 1)
# 在第一个子图中绘制正弦函数
ax1.plot(x, y1)
ax1.set_title('sin(x)')
# 在第二个子图中绘制正弦函数
ax2.plot(x, y2)
ax2.set_title('sin(x - pi/2)')
# 设置子图之间的间距
fig.subplots_adjust(hspace=0.5)
# 显示图像
plt.show()
```
运行以上代码,即可在一张图片中绘制两个不重叠的正弦函数,它们的水平线不同。效果如下图所示:

相关问题
使用matplotlib优化下面的代码,绘制两个正弦函数图形,两个函数都是sin(2x)且水平线不重叠第一个函数所占面积的颜色全为淡紫色,第二个函数所占用面积颜色在y>0时为淡紫色,y<0时为肉粉色,函数线的颜色为蓝色,保证x,y轴都没有刻度。注意:可以使用的函数包括:fill_between、xlim、ylim、xticks、yticks、axes、plot import numpy as np import matplotlib.pyplot as plt n = 256 X = np.linspace(-np.pi, np.pi, n) Y = np.sin(2 * X) # YOUR CODE HERE plt.show()
以下是使用matplotlib绘制两个正弦函数图形的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
n = 256
X = np.linspace(-np.pi, np.pi, n)
Y1 = np.sin(2 * X)
Y2 = np.sin(2 * X)
fig, ax = plt.subplots()
# 绘制第一个函数的线和填充
ax.plot(X, Y1, color='blue', linewidth=2)
ax.fill_between(X, 0, Y1, color='lavender')
# 绘制第二个函数的线和填充
ax.plot(X, Y2, color='blue', linewidth=2)
ax.fill_between(X, 0, Y2, where=(Y2>=0), color='lavender')
ax.fill_between(X, 0, Y2, where=(Y2<=0), color='pink')
# 设置x轴和y轴的范围和刻度
ax.set_xlim([-np.pi, np.pi])
ax.set_ylim([-1, 1])
ax.set_xticks([])
ax.set_yticks([])
plt.show()
```
图像如下:

如何使用Python的Matplotlib或Plotly绘制时间线,标注关键研究里程碑?分享案例看看?
<think>嗯,用户想用Python的Matplotlib或Plotly画时间线,标注关键研究里程碑。首先,我得回忆一下这两个库的绘图功能。Matplotlib比较基础,可能得用一些条形图或者散点图来模拟时间线,而Plotly可能更简单,因为它有现成的时间线图表类型。
用户可能需要步骤指导和案例。首先,得确定数据格式,时间线一般需要时间数据和事件描述。可能需要日期类型的处理,比如用datetime模块。然后,考虑如何将这些数据在图表上展示,比如在Matplotlib中用水平线或标记点,加上注释。
对于Matplotlib,可能需要使用hlines来画水平线,设置y轴的位置,然后用text或者annotate添加事件描述。坐标轴的调整可能比较麻烦,特别是事件较多时,需要调整布局防止文字重叠。可能需要调整图表的尺寸和字体大小,或者旋转标签。
Plotly的话,应该更简单,因为Plotly Express有timeline的功能,比如px.timeline,可以直接传入数据框,指定开始时间、结束时间(如果需要范围)、事件名称和y轴的分组。这样生成的时间线会更直观,而且交互性更好,比如悬停显示详细信息,拖动缩放等。
然后,案例部分需要提供具体的代码示例。Matplotlib的例子可能需要手动构建每个事件的位置,而Plotly的例子则更简洁。需要注意的是,用户可能对数据格式不熟悉,所以要展示如何构造数据,比如用列表或者DataFrame。
可能遇到的问题包括时间格式的处理,比如字符串转datetime对象,以及在Matplotlib中如何正确放置注释的位置,避免重叠。在Plotly中,可能需要调整布局参数,比如高度、标题等。
另外,用户提到“关键研究里程碑”,可能希望每个事件有明确的标记点和说明,所以注释的位置和样式很重要。颜色区分不同的里程碑类型可能也是一个需求,可以在Plotly中通过颜色参数实现。
需要检查代码的正确性,比如Matplotlib的ax.hlines的参数是否正确,y轴的刻度设置是否合理。Plotly的例子是否正确地使用了px.timeline,并指定了正确的参数,比如x_start和x_end,以及y轴的分配。
最后,确保回答结构清晰,分步骤说明,并且案例能直接运行,用户复制后可以修改数据即可使用。可能需要提醒用户安装必要的库,比如pip install matplotlib plotly。</think>我将分步骤讲解Python绘制时间线的方法,并提供Matplotlib和Plotly双方案例:
---
### **一、数据准备原则**
1. 时间数据必须转为`datetime`类型
2. 事件描述需要简洁明确
3. 建议数据结构:
```python
events = [
{"date": "2020-01-01", "event": "项目启动"},
{"date": "2020-06-15", "event": "原型验证成功"},
{"date": "2021-03-22", "event": "论文发表"}
]
```
---
### **二、Matplotlib方案**
#### 核心方法:`hlines`+文本标注
```python
import matplotlib.pyplot as plt
from datetime import datetime
# 数据转换
dates = [datetime.strptime(e["date"], "%Y-%m-%d") for e in events]
labels = [e["event"] for e in events]
# 创建画布
fig, ax = plt.subplots(figsize=(10, 4))
# 绘制时间线
ax.hlines(y=0, xmin=min(dates), xmax=max(dates), color='gray', lw=2)
# 添加事件标记
ax.scatter(dates, [0]*len(dates), color='red', s=100, zorder=3)
# 标注文本
for date, label in zip(dates, labels):
ax.text(date, 0.2, label, rotation=45, ha='right', va='bottom')
# 样式调整
ax.set_yticks([])
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.title("研究里程碑时间线")
plt.tight_layout()
plt.show()
```
---
### **三、Plotly方案**
#### 核心方法:`px.timeline`
```python
import plotly.express as px
import pandas as pd
# 创建数据框
df = pd.DataFrame({
"事件": [e["event"] for e in events],
"开始时间": [datetime.strptime(e["date"], "%Y-%m-%d") for e in events],
"结束时间": [datetime.strptime(e["date"], "%Y-%m-%d") for e in events] # 单日事件
})
# 绘制时间线
fig = px.timeline(df,
x_start="开始时间",
x_end="结束时间",
y="事件",
title="交互式研究时间线")
# 调整显示效果
fig.update_layout(height=300,
showlegend=False,
xaxis_title="",
yaxis_title="")
fig.update_traces(marker=dict(color='#1f77b4'))
fig.show()
```
---
### **四、案例对比**
| 特性 | Matplotlib | Plotly |
|------------|-------------------------|-----------------------|
| 交互性 | 静态图片 | 支持缩放/悬停提示 |
| 代码复杂度 | 需要手动控制元素位置 | API高度封装 |
| 输出格式 | PNG/PDF等静态格式 | HTML/Web交互式 |
| 时间范围显示 | 需手动设置xlim | 自动适应时间范围 |
---
### **五、进阶技巧**
1. **时间范围事件**:在数据中设置不同的`start_date`和`end_date`
2. **颜色编码**:添加`color`字段区分事件类型
3. **多级时间线**:通过`y`轴数值创建分层效果(Plotly支持更佳)
4. **重要事件突出**:使用不同大小/颜色的标记点
实际科研案例:展示某AI领域发展时间线时,可用红色标记ImageNet挑战赛(2012)、黄色标记Transformer论文(2017)、绿色标记GPT-3发布(2020),通过Plotly的悬停提示展示论文引用量等附加信息。
阅读全文
相关推荐














