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

Sympy绘图如何添加次Y轴及修改线条样式?

我来帮你搞定Sympy绘图的这两个需求——给第二个表达式加次Y轴,还有修改线条样式。其实这俩都能通过Sympy的plot对象结合它的matplotlib后端来实现,具体操作看下面:

1. 为第二个表达式添加次Y轴

Sympy的plot函数本身没有直接提供次Y轴的参数,但我们可以借助它的matplotlib后端手动创建次轴,把第二个绘图的数据绑定上去。具体步骤如下:

from sympy import symbols
from sympy.plotting import plot
import matplotlib.pyplot as plt

x = symbols('x')

# 创建主Y轴的绘图(不直接显示)
p1 = plot(x**4, (x,10,20), label='$x^4$', show=False, legend=True)
# 创建要放到次Y轴的绘图(同样不直接显示)
p2 = plot(x, (x,10,20), line_color='red', label='$x$', show=False, legend=True)

# 获取matplotlib的画布和主轴对象
fig, ax_main = p1._backend.fig, p1._backend.ax

# 创建次Y轴
ax_secondary = ax_main.twinx()

# 提取第二个绘图的x、y数据,绘制到次轴上
series_p2 = p2[0]
x_values = series_p2.get_x_range()
y_values = [series_p2.expr.subs(x, val) for val in x_values]
ax_secondary.plot(x_values, y_values, color=series_p2.line_color, label=series_p2.label)

# 调整轴标签和图例
ax_main.set_ylabel('$x^4$')
ax_secondary.set_ylabel('$x$')
# 合并两个轴的图例,避免重叠
handles_main, labels_main = ax_main.get_legend_handles_labels()
handles_sec, labels_sec = ax_secondary.get_legend_handles_labels()
ax_main.legend(handles_main + handles_sec, labels_main + labels_sec, loc='upper left')

# 显示最终图形
plt.show()

这段代码的核心是通过_backend属性拿到matplotlib的底层对象,然后用twinx()创建共享X轴的次Y轴,最后把第二个绘图的数据手动绘制到次轴上,再统一调整标签和图例。

2. 修改线条样式(比如虚线)

修改线条样式有两种简单的方式,不用深入_backend也能实现:

方式一:创建绘图时直接指定

Sympy的新版本支持直接在plot函数中传递matplotlib的线条样式参数,比如用linestyle(也可以简写为ls)设置虚线:

p2 = plot(x, (x,10,20), line_color='red', label='$x$', show=False, legend=True, linestyle='--')

常用的线条样式值有:

  • '-' 实线(默认)
  • '--' 虚线
  • ':' 点线
  • '-.' 点划线

方式二:修改已创建的绘图对象

如果已经创建了plot对象,可以直接修改对应系列的line_style属性:

p2 = plot(x, (x,10,20), line_color='red', label='$x$', show=False, legend=True)
# 将线条改为虚线
p2[0].line_style = '--'

要是需要更精细的调整(比如线条宽度、标记点样式),也可以通过_backend拿到matplotlib的线条对象直接修改,比如:

# 获取主绘图的第一条线条,设置宽度为2
p1._backend.ax.lines[0].set_linewidth(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:13:14