![](/img/trans.png)
[英]Color the pixel red in gray-scale image if is greater than some threshold
[英]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.