簡體   English   中英

如果斜率大於某個閾值,則將 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執行最小二乘法並返回擬合線的斜率,這不是您想要的。

相反,您正在尋找所有連續點之間的斜率:

  • 使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM