首页 > 解决方案 > Matplotlib:将多列绘制成具有不同 y 轴的图形

问题描述

我想绘制一个与此类似的图形(抱歉,它看起来不太好):

在此处输入图像描述

有了数据,比如说,像这样:

y = np.random.rand(10,3)
y[:,0]= np.arange(1,11)
df = pd.DataFrame(y, columns=["X", "Volume", "Time"])
df

X   Volume  Time
0   1.0 0.517895    0.182525
1   2.0 0.488399    0.252989
2   3.0 0.992292    0.941301
3   4.0 0.147368    0.650542
4   5.0 0.236345    0.662650
5   6.0 0.913300    0.539643
6   7.0 0.373740    0.379043
7   8.0 0.752482    0.875370
8   9.0 0.040096    0.097381
9   10.0    0.793734    0.625026

有谁知道该怎么做?谢谢,我尝试挖掘堆栈溢出但没有发现任何类似的问题。提前感谢您的任何想法和建议!

标签: pythonmatplotlibplot

解决方案


这是我的解决方案。其实很简单,使用 ax2=ax.twinx() 后,将 ax2 y 轴的范围翻转 ax2.set_ylim(BIG_NUMBER, SMALL_NUMBER)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

y = np.random.rand(10,3)
y[:,0]= np.arange(1,11)
df = pd.DataFrame(y, columns=['x', 'v', 't'])
df['x'] = np.arange(1, 11, 1)

fig = plt.figure() # Create matplotlib figure

ax = fig.add_subplot(111) # Create matplotlib axes
ax2 = ax.twinx() # Create another axes that shares the same x-axis as ax.


ax.bar(df['x'],df['v'], color='red', alpha=0.8)
ax.set_ylabel('v', color='red')
ax.tick_params(axis='y', labelcolor='red')
ax.set_ylim(0, 1.5)

ax2.bar(df['x'], df['t'], color='blue', alpha=0.5)
ax2.set_ylabel('t', color='b')
ax2.tick_params(axis='y', labelcolor='blue')
ax2.set_ylim(1.5, 0)

plt.show()

推荐阅读