使用双轴绘制 pandas 折线图并循环遍历数据框
Plot pandas line chart using dual axis and loop through dataframe
我有这样的数据框,
data = {'TIMEFRAME':['9/12/2014 17:52', '10/12/2014 5:02', '10/12/2014 8:04'],
'Volumetric Flow Meter 1':[0.82, 0.88, 0.9],
'Pump Speed (RPM)':[2.5,2.7,3.01],
'Data Source':['raw data','raw data','raw data'],
'PUMP FAILURE (1 or 0)':[0,0,1]}
df = pd.DataFrame(data)
df
TIMEFRAME Volumetric Flow Meter 1 Pump Speed (RPM) Data Source PUMP FAILURE (1 or 0)
9/12/2014 17:52 0.82 2.5 raw data 0
10/12/2014 5:02 0.88 2.7 raw data 0
10/12/2014 8:04 0.90 3.01 raw data 1
我正在尝试遍历数据集,针对泵故障单独绘制每个数值变量以识别趋势。我必须创建数据框中每个数字列的列表并循环遍历它以根据 PUMP FAILURE (1 or 0) 列绘制它们。
对于每个图,我必须确保设置了双轴,这样我才能在第二个 Y 轴上看到泵故障(0 或 1),在第一个 Y 轴上看到属性。
输出是这样的,
这是我的方法,
ListOfVariables=[df["Pump Speed (RPM)"],df["Volumetric Flow Meter 1"]]
for item in ListOfVariables:
first_axis = df[item].plot #Looping through every item in the dataframe.
second_axis = first_axis.twinx() #The Twinx function is used to ensure we share the X-Axis for both plots
second_axis.plot(df['PUMP FAILURE (1 or 0)'], color='teal')
plt.title(item)
plt.show()
这不会产生所需的输出。任何帮助表示赞赏。谢谢
使用:
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
data = {'TIMEFRAME': pd.date_range('9/12/2014 17:52', '10/12/2014 18:04', 100),
'Volumetric Flow Meter 1':np.random.randn(100),
'Pump Speed (RPM)':np.random.randn(100),
'Data Source':['raw data']*100,
'PUMP FAILURE (1 or 0)':np.random.randn(100)}
df = pd.DataFrame(data)
df['TIMEFRAME'] = pd.to_datetime(df['TIMEFRAME'])
cols = df.columns[:-1]
for col in cols[1:-1]:
fig, ax = plt.subplots(figsize=(15,3))
ax.plot(df[cols[0]], df['PUMP FAILURE (1 or 0)'], color = 'red')
ax2 = ax.twinx()
ax2.plot(df[cols[0]], df[col], color='teal')
ax.set_xticklabels(df[cols[0]].dt.floor('S'), rotation=90)
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=600))
plt.title(col)
plt.show()
interval = 600,表示每10个小时。我用 300 对它进行了测试,表示效果不是很好。如果你想要更小的时间步长,首先增加无花果尺寸。
输出:
我有这样的数据框,
data = {'TIMEFRAME':['9/12/2014 17:52', '10/12/2014 5:02', '10/12/2014 8:04'],
'Volumetric Flow Meter 1':[0.82, 0.88, 0.9],
'Pump Speed (RPM)':[2.5,2.7,3.01],
'Data Source':['raw data','raw data','raw data'],
'PUMP FAILURE (1 or 0)':[0,0,1]}
df = pd.DataFrame(data)
df
TIMEFRAME Volumetric Flow Meter 1 Pump Speed (RPM) Data Source PUMP FAILURE (1 or 0)
9/12/2014 17:52 0.82 2.5 raw data 0
10/12/2014 5:02 0.88 2.7 raw data 0
10/12/2014 8:04 0.90 3.01 raw data 1
我正在尝试遍历数据集,针对泵故障单独绘制每个数值变量以识别趋势。我必须创建数据框中每个数字列的列表并循环遍历它以根据 PUMP FAILURE (1 or 0) 列绘制它们。
对于每个图,我必须确保设置了双轴,这样我才能在第二个 Y 轴上看到泵故障(0 或 1),在第一个 Y 轴上看到属性。
输出是这样的,
这是我的方法,
ListOfVariables=[df["Pump Speed (RPM)"],df["Volumetric Flow Meter 1"]]
for item in ListOfVariables:
first_axis = df[item].plot #Looping through every item in the dataframe.
second_axis = first_axis.twinx() #The Twinx function is used to ensure we share the X-Axis for both plots
second_axis.plot(df['PUMP FAILURE (1 or 0)'], color='teal')
plt.title(item)
plt.show()
这不会产生所需的输出。任何帮助表示赞赏。谢谢
使用:
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
data = {'TIMEFRAME': pd.date_range('9/12/2014 17:52', '10/12/2014 18:04', 100),
'Volumetric Flow Meter 1':np.random.randn(100),
'Pump Speed (RPM)':np.random.randn(100),
'Data Source':['raw data']*100,
'PUMP FAILURE (1 or 0)':np.random.randn(100)}
df = pd.DataFrame(data)
df['TIMEFRAME'] = pd.to_datetime(df['TIMEFRAME'])
cols = df.columns[:-1]
for col in cols[1:-1]:
fig, ax = plt.subplots(figsize=(15,3))
ax.plot(df[cols[0]], df['PUMP FAILURE (1 or 0)'], color = 'red')
ax2 = ax.twinx()
ax2.plot(df[cols[0]], df[col], color='teal')
ax.set_xticklabels(df[cols[0]].dt.floor('S'), rotation=90)
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=600))
plt.title(col)
plt.show()
interval = 600,表示每10个小时。我用 300 对它进行了测试,表示效果不是很好。如果你想要更小的时间步长,首先增加无花果尺寸。
输出: