如果斜率大于某个阈值,则将 python 中的线涂成红色
if slope is greater than some threshold, then color the line red in python
我在 python 中绘制了一个折线图。我需要做的最后一件事是添加一条线,告诉它在斜率大于 25 时将图表的一部分着色为红色。我该怎么做?
这是我目前的情况。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_csv('ReactorStartupTemps.csv')
print(data)
plt.rcParams["figure.figsize"] = [5, 4]
plt.rcParams["figure.autolayout"] = True
plt.xlabel('Time [min]', fontdict={'fontname': 'Times New Roman',
'style': 'italic'})
plt.ylabel('Temperature [C]', fontdict={'fontname': 'Times New Roman',
'style': 'italic'})
plt.title('Reactor Startup Temperatures', fontdict={'fontname': 'Times
New Roman', 'style': 'italic'})
[slope, intercept] = np.polyfit(data.Time, data.Temp, 1)
if slope > 25:
plt.plot(data.Time, data.Temp, color="red", linewidth=1.5)
else:
plt.plot(data.Time, data.Temp, color="black", linewidth=1.5)
plt.minorticks_on()
plt.grid(which='major', color='grey', linewidth=.8)
plt.grid(which='minor', color='lightgrey', linewidth=.4, ls='--')
plt.show()
图表需要的样子:
截至目前的图表:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('ReactorStartupTemps.csv')
print(data)
plt.rcParams["figure.figsize"] = [7, 5]
plt.rcParams["figure.autolayout"] = True
plt.xlabel('Time [min]', fontdict = {'fontname': 'Times New Roman',
'style': 'italic'})
plt.ylabel('Temperature [C]', fontdict = {'fontname': 'Times New
Roman',
'style': 'italic'})
plt.title('Reactor Startup Temperatures', fontdict = {'fontname':
'Times
New Roman', 'style': 'italic'})
slope, intercept = np.polyfit(np.log(data.Time), np.log(data.Temp), 1)
if slope > 25 :
plt.plot(data.Time, data.Temp, color = "red",linewidth = 1.5)
else:
plt.plot(data.Time, data.Temp, color = "black",linewidth = 1.5)
plt.minorticks_on()
plt.grid(which = 'major', color = 'grey', linewidth = .8)
plt.grid(which = 'minor', color = 'lightgrey', linewidth = .4, ls =
'--')
plt.show()
首先你必须计算斜率然后你可以实现你的条件
用于斜率计算
slope, intercept = np.polyfit(np.log(data.Time), np.log(data.Temp), 1)
目前您正在使用回归线的斜率。 np.polyfit
执行最小二乘法和 returns 拟合线的斜率,这不是您想要的。
相反,您正在寻找所有连续点之间的斜率:
- 使用
Series.diff
计算所有连续点(y2-y1) / (x2-x1)
- 使用
Series.where
屏蔽斜率超过25的线段
- 使用高
zorder
提高屏蔽段
THRESHOLD = 25
slopes = data.Temp.diff() / data.Time.diff()
plt.plot(data.Time, data.Temp, color='k')
plt.plot(data.Time, data.Temp.where(slopes > THRESHOLD), color='r', zorder=10)
我在 python 中绘制了一个折线图。我需要做的最后一件事是添加一条线,告诉它在斜率大于 25 时将图表的一部分着色为红色。我该怎么做?
这是我目前的情况。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_csv('ReactorStartupTemps.csv')
print(data)
plt.rcParams["figure.figsize"] = [5, 4]
plt.rcParams["figure.autolayout"] = True
plt.xlabel('Time [min]', fontdict={'fontname': 'Times New Roman',
'style': 'italic'})
plt.ylabel('Temperature [C]', fontdict={'fontname': 'Times New Roman',
'style': 'italic'})
plt.title('Reactor Startup Temperatures', fontdict={'fontname': 'Times
New Roman', 'style': 'italic'})
[slope, intercept] = np.polyfit(data.Time, data.Temp, 1)
if slope > 25:
plt.plot(data.Time, data.Temp, color="red", linewidth=1.5)
else:
plt.plot(data.Time, data.Temp, color="black", linewidth=1.5)
plt.minorticks_on()
plt.grid(which='major', color='grey', linewidth=.8)
plt.grid(which='minor', color='lightgrey', linewidth=.4, ls='--')
plt.show()
图表需要的样子:
截至目前的图表:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('ReactorStartupTemps.csv')
print(data)
plt.rcParams["figure.figsize"] = [7, 5]
plt.rcParams["figure.autolayout"] = True
plt.xlabel('Time [min]', fontdict = {'fontname': 'Times New Roman',
'style': 'italic'})
plt.ylabel('Temperature [C]', fontdict = {'fontname': 'Times New
Roman',
'style': 'italic'})
plt.title('Reactor Startup Temperatures', fontdict = {'fontname':
'Times
New Roman', 'style': 'italic'})
slope, intercept = np.polyfit(np.log(data.Time), np.log(data.Temp), 1)
if slope > 25 :
plt.plot(data.Time, data.Temp, color = "red",linewidth = 1.5)
else:
plt.plot(data.Time, data.Temp, color = "black",linewidth = 1.5)
plt.minorticks_on()
plt.grid(which = 'major', color = 'grey', linewidth = .8)
plt.grid(which = 'minor', color = 'lightgrey', linewidth = .4, ls =
'--')
plt.show()
首先你必须计算斜率然后你可以实现你的条件
用于斜率计算
slope, intercept = np.polyfit(np.log(data.Time), np.log(data.Temp), 1)
目前您正在使用回归线的斜率。 np.polyfit
执行最小二乘法和 returns 拟合线的斜率,这不是您想要的。
相反,您正在寻找所有连续点之间的斜率:
- 使用
Series.diff
计算所有连续点(y2-y1) / (x2-x1)
- 使用
Series.where
屏蔽斜率超过25的线段 - 使用高
zorder
提高屏蔽段
THRESHOLD = 25
slopes = data.Temp.diff() / data.Time.diff()
plt.plot(data.Time, data.Temp, color='k')
plt.plot(data.Time, data.Temp.where(slopes > THRESHOLD), color='r', zorder=10)