matplotlib 双x轴
时间: 2024-09-19 15:10:34 浏览: 50
在matplotlib库中,创建双x轴通常用于需要在同一图表上展示两个不同类型或者不同尺度的数据。这可以通过`twinx()`函数实现,它会返回一个新的坐标轴,共享相同的x轴范围。以下是基本步骤:
1. 创建主图 (`fig, ax1 = plt.subplots()`)。
2. 使用`ax1`设置第一个x轴的数据和标签。
3. 添加第二个x轴 (`ax2 = ax1.twinx()`)。
4. 使用`ax2`设置第二个x轴的数据和标签,通常是不同的数据系列或者不同的刻度。
示例代码如下:
```python
import matplotlib.pyplot as plt
# 主图数据
x1 = [1, 2, 3, 4]
y1 = [10, 20, 30, 40]
# 第二个x轴数据
x2 = [5, 6, 7, 8]
y2 = [50, 60, 70, 80]
# 绘制两条线
ax1.plot(x1, y1, label='First Data')
ax2.plot(x2, y2, color='r', label='Second Data')
# 设置x轴和y轴标签
ax1.set_xlabel('X-axis 1')
ax1.set_ylabel('Y-axis 1 (main data)')
ax2.set_ylabel('Y-axis 2 (additional data)')
# 添加标题和图例
plt.title('Double X-Axes Example')
plt.legend()
# 显示图形
plt.show()
```
相关问题
matplotlib 双x轴双y轴 多条曲线
好的,我可以帮你解决这个问题。你可以使用 matplotlib 的 `twinx()` 和 `twiny()` 方法来创建第二个 x 轴和 y 轴,并使用 `plot()` 方法画出多条曲线。
下面是一个例子:
```python
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 创建图像对象和第一个坐标轴
fig, ax1 = plt.subplots()
# 画第一条曲线
ax1.plot(x, y1, color='r', label='sin')
# 设置第一个坐标轴的标签和颜色
ax1.set_xlabel('x')
ax1.set_ylabel('sin(x)', color='r')
ax1.tick_params(axis='y', labelcolor='r')
# 创建第二个坐标轴
ax2 = ax1.twinx()
# 画第二条曲线
ax2.plot(x, y2, color='g', label='cos')
# 设置第二个坐标轴的标签和颜色
ax2.set_ylabel('cos(x)', color='g')
ax2.tick_params(axis='y', labelcolor='g')
# 创建第三个坐标轴
ax3 = ax1.twiny()
# 画第三条曲线
ax3.plot(x, y3, color='b', label='tan')
# 设置第三个坐标轴的标签和颜色
ax3.set_xlabel('tan(x)', color='b')
ax3.tick_params(axis='x', labelcolor='b')
# 添加图例
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
lines3, labels3 = ax3.get_legend_handles_labels()
ax3.legend(lines + lines2 + lines3, labels + labels2 + labels3, loc='best')
# 显示图像
plt.show()
```
在这个例子中,我们创建了一个图像对象 `fig` 和一个坐标轴对象 `ax1`,然后使用 `plot()` 方法画出第一条曲线。接着,我们使用 `twinx()` 方法创建了第二个 y 轴,并使用 `plot()` 方法画出第二条曲线。最后,我们使用 `twiny()` 方法创建了第二个 x 轴,并使用 `plot()` 方法画出第三条曲线。
注意,我们需要分别设置每个坐标轴的标签和颜色,并使用 `tick_params()` 方法设置每个坐标轴的刻度标签颜色。同时,我们需要使用 `get_legend_handles_labels()` 方法获取每个坐标轴的图例,并使用 `legend()` 方法将它们合并在一起。
希望这个例子能够帮助你画出多条曲线的双 x 轴双 y 轴图像。
matplotlib共用x轴
共用x轴是指在matplotlib中,可以在同一张图中绘制多个子图,这些子图共享相同的x轴。这样可以方便地比较不同数据之间的关系。有几种方法可以实现共用x轴的效果。
一种方法是使用`plt.subplots`函数创建多个子图,并使用`ax.twinx()`函数创建共用x轴的第二个y轴。然后,分别在两个子图上绘制不同的数据。例如,可以使用以下代码实现共用x轴的效果:
```python
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 * y1
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')
ax1.set_xlabel("X data")
ax1.set_ylabel("Y1", color='g')
ax2.set_ylabel("Y2", color='b')
plt.show()
```
另一种方法是在同一张图上使用`plt.bar`函数绘制多个柱状图,并使用正负值来表示不同的数据。可以使用`plt.ylim`函数设置y轴的范围,以便显示正负值。例如,可以使用以下代码实现共用x轴的效果:
```python
import matplotlib.pyplot as plt
import numpy as np
x_data = \["20{}".format(i) for i in range(18, 23)\]
y_data = np.random.randint(100, 300, 5)
y2_data = np.random.randint(100, 300, 5)
plt.bar(x_data, +y_data, width=0.3, label="IPhone")
plt.bar(x_data, -y2_data, width=0.3, label="Android")
plt.ylabel("sale")
plt.xlabel("year")
plt.ylim(-350, 350)
plt.yticks(\[300, 200, 100, 0, -100, -200, -300\], \[300, 200, 100, 0, 100, 200, 300\])
plt.legend()
plt.show()
```
这两种方法都可以实现共用x轴的效果,具体使用哪种方法取决于数据的特点和绘图的需求。
#### 引用[.reference_title]
- *1* [matplotlib 双y轴公用一个x轴](https://blog.csdn.net/June19/article/details/119454735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [matplotlib中两张图如何共用一个x轴,而y轴不一样。](https://blog.csdn.net/qq_43391414/article/details/125569774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文