You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SymPy中绘制x轴降序的图像?实现曲线朝右上角增长的方法

实现SymPy绘图中曲线朝右上角增长及x轴降序的方法

当然可以实现!你遇到的问题是原函数h(p)随p增大而递减,所以曲线呈现从左上到右下的趋势。想要让曲线朝右上角增长,或者让x轴降序排列,有两种简单的解决办法:

方法1:借助Matplotlib底层接口反转x轴

SymPy的plot是基于Matplotlib做的封装,所以我们可以拿到绘图后的Matplotlib轴对象,手动反转x轴的显示顺序。这样不用修改原函数,就能让x轴从大到小排列,曲线自然呈现右上增长的效果。

具体代码如下:

from sympy import symbols, plot

p = symbols('p', positive=True)
h = (3.731444 - p**0.1902631) / 0.841728e-4
p_low = 150
p_high = 1013.25

# 先创建绘图对象但不显示
plot_obj = plot(h, (p, p_low, p_high), axis_center=(p_low,0), show=False)
# 获取轴对象并反转x轴
plot_obj.ax[0].invert_xaxis()
# 显示调整后的图像
plot_obj.show()

关键是用show=False延迟显示,这样才能在渲染前修改轴的属性。执行后x轴会从1013.25到150降序排列,曲线就变成从左下到右上的增长趋势了。

方法2:变量替换让函数转为递增形式

如果你希望x轴保持从小到大的顺序,但函数本身是递增的,可以做个变量替换:定义一个新变量q,让q增大时对应的p减小。比如设q = p_high + p_low - p,这样当q从150增加到1013.25时,p会从1013.25减小到150,对应的h值就会递增。

代码示例:

from sympy import symbols, plot

p = symbols('p', positive=True)
h = (3.731444 - p**0.1902631) / 0.841728e-4
p_low = 150
p_high = 1013.25

# 定义新变量q
q = symbols('q', positive=True)
# 将p用q表示,代入原函数得到h(q)
h_q = h.subs(p, p_high + p_low - q)

# 绘制q从p_low到p_high的图像,此时h随q增大而递增
plot(h_q, (q, p_low, p_high), axis_center=(p_low,0))

这样绘制出来的曲线,x轴q从小到大排列,h随q增大而上升,完全符合你想要的“朝右上角增长”的直观效果。

为什么直接反转区间没成功?

SymPy的plot函数要求区间的下限必须小于上限,如果你尝试写(p, p_high, p_low),它会自动交换上下限,所以没法直接通过反转区间参数来实现x轴降序——这就是你之前尝试失败的原因,用上面两种方法就能解决啦。

内容的提问来源于stack exchange,提问作者mins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:12:31