我正在做一个柴油循环图,我想找出如何使我的滑块只影响一个图表,即.当你改变压缩比的值时,T-S图不应该改变.

以下是我的代码:

import numpy as np
import math
import plotly.io as pio
from plotly.subplots import make_subplots
pio.renderers.default='browser'

# Constants and assumptions

bore = .078
stroke = .062
vd = math.pi * (bore/2)**(2) * stroke
rk = 15 #typical compression ratio for small diesel engines
V2 = vd / (rk - 1)
V1 = rk * V2
T1 = 300 #kelvin assumed atmospheric
P1 = 101.325 #kpa assumed athmospheric
k = 1.4 #assumed ideal gas
rc = 2.5 #for high efficiency operation
S1 = 10 #change. for testing
cp = 1.0038
cv = 0.717

# equations based on value
P2 = P1 * (rk)**k
T2 = T1 * (rk)**(k-1)
P3 = P2
T3 = rc * T2
V3 = V2 * rc
V4 = V1
P4 = P3 * (V3 / V4)**k
T4 = T3 * (P4 / P3)**((k-1)/k)
m = (P1*V1)/(0.287*T1)
S3 = S1 + m * cp * np.log(T3/T2)


V = [V1]
P = [P1]
T = [T1]
S = [S1]


points12 = 100
points34 = 100
points23 = 100
points41 = 100


for i in range(1, points12 + 1):
    Vi = V1 * (V2 / V1) ** (i / points12)
    Pi = P1 * (V1 / Vi) ** k
    V.append(Vi)
    P.append(Pi)
    
for i in range(0, points23 + 1):
    Ti = T2 * (T3 / T2) ** (i / points23)
    Si = S1 + m * cp * np.log(Ti / T2)
    T.append(Ti)
    S.append(Si)

for i in range(0, points34 + 1):
    Vi = V3 * (V4 / V3) ** (i / points34)
    Pi = P3 * (V3 / Vi) ** k
    V.append(Vi)
    P.append(Pi)

for i in range(0, points41 + 1):
    Ti = T4 * (T1 / T4) ** (i / points41)
    Si = S3 + m * cv * np.log(Ti / T4)
    T.append(Ti)
    S.append(Si)

V.extend([V1, V1])
P.extend([P1, P1])
T.extend([T1, T1])
S.extend([S1, S1])

fig = make_subplots(cols=2)


slider_steps = []
for rk in range(10, 31):
    V2 = vd / (rk - 1)
    V1 = rk * V2
    P2 = P1 * (rk)**k
    T2 = T1 * (rk)**(k-1)
    P3 = P2
    T3 = rc * T2
    V3 = V2 * rc
    V4 = V1
    P4 = P3 * (V3 / V4)**k
    T4 = T3 * (P4 / P3)**((k-1)/k)
    V = [V1]
    P = [P1]
    effi = (1-(1/(rk**(k-1)))*((((rc)**k)-1)/(k*(rc-1))))*100
    clr= V2*1000000

    # Recalculate the points using the new rk value
    for i in range(1, points12 + 1):
        Vi = V1 * (V2 / V1) ** (i / points12)
        Pi = P1 * (V1 / Vi) ** k
        V.append(Vi)
        P.append(Pi)
        
    # for i in range(1, points23 + 1):
    #     Ti = T2 * (T3 / T2) ** (i / points23)
    #     Si = S1 + m * cp * np.log(Ti / T2)
    #     T.append(Ti)
    #     S.append(Si)

    for i in range(0, points34 + 1):
        Vi = V3 * (V4 / V3) ** (i / points34)
        Pi = P3 * (V3 / Vi) ** k
        V.append(Vi)
        P.append(Pi)

    # for i in range(1, points41 + 1):
    #     Ti = T4 * (T1 / T4) ** (i / points41)
    #     Si = S3 + m * cv * np.log(Ti / T4)
    #     T.append(Ti)
    #     S.append(Si)

    V.extend([V1, V1])
    P.extend([P1, P1])
    # T.extend([T1, T1])
    # S.extend([S1, S1])
    
    
    step = dict(
        method="update",
        label=f"rk = {rk}  engine efficiency in percent: {effi} clearance/combustion chamber vol: {clr}cm^3 cut off ratio: {rc}   mass={m}",
        args=[{"y": [P], "x": [V]}],
    )
    slider_steps.append(step)

sliders = [
    dict(
        active=15,
        currentvalue={"prefix": "Compression Ratio (rk): "},
        pad={"t": 50},
        steps=slider_steps,
    )
]

fig.add_scatter(x=V, y=P, mode='lines+markers', name=  'Diesel Cycle PV', row=1, col=1)
fig.add_scatter(x=S, y=T, mode='lines+markers', name='Diesel Cycle TS', row=1, col=2)

fig.update_layout(
    sliders=sliders,
    title='Diesel Cycle P-V Diagram',
    xaxis=dict(title='Volume (m^3)'),
    yaxis=dict(title='Pressure (kPa)'),
)

fig.show()

问题:只要我移动滑块,t-S曲线图就变成了p-v曲线图的副本.

目前,我刚刚开始学习ploly和python,所以我对这段代码仍然不太确定,我需要对它进行更多的研究.最初的代码是由ChatGPT写的,我研究了几天,然后在网上寻找关于如何用LOOP绘制等熵曲线以及如何添加第二个曲线图的信息.

我对step = dict( args=[{"y", [P]], "x": [V]}])有怀疑,我也需要帮助,了解如何指定要更新哪个曲线图的哪个x和y.

推荐答案

您的怀疑是正确的,您需要在每个步骤args中指定要更新的跟踪(索引)(默认行为是将更改应用于所有跟踪).

请注意,args引用传递给指定method的参数,因此您可以参考相应的Plotly.js函数引用来了解它是如何工作的.对于method="update",步骤args应符合Plotly.update()函数签名:

Plotly.update(graphDiv, data_update, layout_update, [, traceIndices])

这意味着将args指定为[ data_update, layout_update, traceIndices ].

还要注意,轨迹索引是从零开始的,并且与这些轨迹的创建顺序相对应(p-v轨迹是首先创建的,因此其索引为0).

step = dict(
    method="update",
    label=f"rk = {rk}  engine efficiency in percent: {effi} clearance/combustion chamber vol: {clr}cm^3 cut off ratio: {rc}   mass={m}",
    args=[{"y": [P], "x": [V]}, {}, [0]],
)

Python相关问答推荐

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

Locust请求中的Python和参数

在内部列表上滚动窗口

Odoo 14 hr. emergency.public内的二进制字段

如何在箱形图中添加绘制线的传奇?

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

如何在表中添加重复的列?

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Django RawSQL注释字段

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

如何创建引用列表并分配值的Systemrame列

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

提取最内层嵌套链接

如何写一个polars birame到DuckDB

如何在Python中创建仅包含完整天数的月份的列表

Django更新视图未更新

按列表分组到新列中

将标签与山脊线图对齐

将鼠标悬停在海运`pairplot`的批注/高亮显示上