python - 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
有谁知道该怎么做?谢谢,我尝试挖掘堆栈溢出但没有发现任何类似的问题。提前感谢您的任何想法和建议!
解决方案
这是我的解决方案。其实很简单,使用 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()
推荐阅读
- javascript - Chartist.js 在 vue.js 中显示工具提示
- reactjs - React Profiler - 我可以确定导致额外提交的原因(灰色)吗?
- mongodb - 有没有更好的方法来构建我的 mongoDB 文档
- r - R表中的粗线,作为对两行进行分组的一种方式
- c++ - 找出对象在其析构函数中的常量
- angular - 无法验证我上传的所有文件
- highcharts - 更改图表标题后,Highcharts userOptions 不更新
- python - Python中的覆盖比较方法
- asp.net-core - 从 Iframe POST 表单时,Asp razor 页面返回 400 代码
- c++ - 如何在 Windows 10 x64 上使用 Bazel 构建和调试 c++ 可执行文件