Python matplotlib 2 y轴组件
Python matplotlib 2 y axis components
我有一些无法复制的数据,但它只是一个简单的读取 CSV 文件:
pumpDf = pd.read_csv('C:\Python Scripts\data.csv', index_col='Date', parse_dates=True)
pumpDf = pumpDf.truncate(before='12/17/2017', after='12/31/2017')
print(pumpDf.head())
print(pumpDf.tail())
DP pump30
Date
2017-12-17 00:00:07.238 9.9969 81.9101
2017-12-17 00:00:07.255 9.9969 81.9101
2017-12-17 00:00:07.275 9.9969 81.9101
2017-12-17 00:00:07.292 9.9861 81.9101
2017-12-17 00:00:07.311 9.9861 82.2360
我正在尝试在单独的 y 轴上绘制两个数据点。知道如何修改此代码吗?
import matplotlib.pyplot as plt
pumpDf.plot()
plt.show()
我正在尝试使用 matplotlib.org 中的这段代码来完成该任务,但我对如何合并我的 pandas 数据框而不是 numpy 数组感到困惑。 # Create some mock data
这段代码是从这里复制的
matplotlib.org/devdocs/gallery/api/two_scales
import numpy as np
import matplotlib.pyplot as plt
def two_scales(ax1, time, data1, data2, c1, c2):
"""
Parameters
----------
ax : axis
Axis to put two scales on
time : array-like
x-axis values for both datasets
data1: array-like
Data for left hand scale
data2 : array-like
Data for right hand scale
c1 : color
Color for line 1
c2 : color
Color for line 2
Returns
-------
ax : axis
Original axis
ax2 : axis
New twin axis
"""
ax2 = ax1.twinx()
ax1.plot(time, data1, color=c1)
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp')
ax2.plot(time, data2, color=c2)
ax2.set_ylabel('sin')
return ax1, ax2
# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
s2 = np.sin(2 * np.pi * t)
# Create axes
fig, ax = plt.subplots()
ax1, ax2 = two_scales(ax, t, s1, s2, 'r', 'b')
# Change color of each axis
def color_y_axis(ax, color):
"""Color your axes."""
for t in ax.get_yticklabels():
t.set_color(color)
return None
color_y_axis(ax1, 'r')
color_y_axis(ax2, 'b')
plt.show()
这在此处有详细记录:
https://matplotlib.org/examples/api/two_scales.html
他们显示的条件片段是:
import numpy as np
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
ax1.tick_params('y', colors='b')
ax2 = ax1.twinx()
s2 = np.sin(2 * np.pi * t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
ax2.tick_params('y', colors='r')
fig.tight_layout()
plt.show()
来自the docs:
pumpDf.DP.plot()
pumpDf.pump30.plot(secondary_y=True)
根据您的示例数据,可以很容易地使用 DataFrame.plot
or pyplot.plot
method. The trick is to use a twin Axes with ax.twinx
。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = ax.twinx()
df.DP.plot(ax=ax)
df.pump30.plot(ax=ax2, color='r')
fig.show()
同样的图片也可以这样创建:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(df.index, df.DP)
ax2.plot(df.index, df.pump30, color='r')
fig.show()
我有一些无法复制的数据,但它只是一个简单的读取 CSV 文件:
pumpDf = pd.read_csv('C:\Python Scripts\data.csv', index_col='Date', parse_dates=True)
pumpDf = pumpDf.truncate(before='12/17/2017', after='12/31/2017')
print(pumpDf.head())
print(pumpDf.tail())
DP pump30
Date
2017-12-17 00:00:07.238 9.9969 81.9101
2017-12-17 00:00:07.255 9.9969 81.9101
2017-12-17 00:00:07.275 9.9969 81.9101
2017-12-17 00:00:07.292 9.9861 81.9101
2017-12-17 00:00:07.311 9.9861 82.2360
我正在尝试在单独的 y 轴上绘制两个数据点。知道如何修改此代码吗?
import matplotlib.pyplot as plt
pumpDf.plot()
plt.show()
我正在尝试使用 matplotlib.org 中的这段代码来完成该任务,但我对如何合并我的 pandas 数据框而不是 numpy 数组感到困惑。 # Create some mock data
这段代码是从这里复制的
matplotlib.org/devdocs/gallery/api/two_scales
import numpy as np
import matplotlib.pyplot as plt
def two_scales(ax1, time, data1, data2, c1, c2):
"""
Parameters
----------
ax : axis
Axis to put two scales on
time : array-like
x-axis values for both datasets
data1: array-like
Data for left hand scale
data2 : array-like
Data for right hand scale
c1 : color
Color for line 1
c2 : color
Color for line 2
Returns
-------
ax : axis
Original axis
ax2 : axis
New twin axis
"""
ax2 = ax1.twinx()
ax1.plot(time, data1, color=c1)
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp')
ax2.plot(time, data2, color=c2)
ax2.set_ylabel('sin')
return ax1, ax2
# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
s2 = np.sin(2 * np.pi * t)
# Create axes
fig, ax = plt.subplots()
ax1, ax2 = two_scales(ax, t, s1, s2, 'r', 'b')
# Change color of each axis
def color_y_axis(ax, color):
"""Color your axes."""
for t in ax.get_yticklabels():
t.set_color(color)
return None
color_y_axis(ax1, 'r')
color_y_axis(ax2, 'b')
plt.show()
这在此处有详细记录: https://matplotlib.org/examples/api/two_scales.html
他们显示的条件片段是:
import numpy as np
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
ax1.tick_params('y', colors='b')
ax2 = ax1.twinx()
s2 = np.sin(2 * np.pi * t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
ax2.tick_params('y', colors='r')
fig.tight_layout()
plt.show()
来自the docs:
pumpDf.DP.plot()
pumpDf.pump30.plot(secondary_y=True)
根据您的示例数据,可以很容易地使用 DataFrame.plot
or pyplot.plot
method. The trick is to use a twin Axes with ax.twinx
。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = ax.twinx()
df.DP.plot(ax=ax)
df.pump30.plot(ax=ax2, color='r')
fig.show()
同样的图片也可以这样创建:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(df.index, df.DP)
ax2.plot(df.index, df.pump30, color='r')
fig.show()