次要y轴

如何解决次要y轴

最近,Sympy绘图发展了很多,但是我找不到在次级y轴上绘制第二个表达式的方法。在下面,我展示了一个示例,其中我合并了两个图,但希望第二个图使用辅助轴:

,

顺便说一句,有没有办法修改线条样式,例如让其中一个破灭?该文档建议使用awk -v ignore_field="1-5,6" ' BEGIN{ FS=OFS="," num=split(ignore_pos,array1,",") for(i=1;i<=num;i++){ if(array1[i]~/-/){ split(array1[i],array2,"-") for(j=array2[1];j<=array2[2];j++){ ignoreFields[j] } } else{ ignoreFields[array1[i]] } } } { for(i=1;i<=NF;i++){ val="" if(!(i in ignoreFields)){ val=(val?val OFS:"")$i } } $0=val } 1 ' Input_file 模块进行微调,但是我不清楚如何实现这一点。参见例如How do I use the `_backend` attribute of a Sympy `plot`

解决方法

this post中的方法可以进行如下调整。请注意,sympy将棘刺置于零位置,这与同一图中的两个轴相混淆。它们可以再次移动到其原始位置。 Matplotlib可以从两个轴的手柄和标签创建组合图例。

from sympy import Symbol,plot,sin
import matplotlib.pyplot as plt


def move_sympyplot_to_axes(p,ax,is_twinx):
    backend = p.backend(p)
    backend.ax = ax
    backend._process_series(backend.parent._series,backend.parent)
    if is_twinx:
        backend.ax.spines['left'].set_color('none')
    else:
        backend.ax.spines['right'].set_color('none')
        backend.ax.spines['left'].set_position(('axes',0))
    backend.ax.spines['bottom'].set_position(('axes',0))
    plt.close(backend.fig)

x = Symbol('x')
p1 = plot(x ** 4,(x,10,20),label='$x^4$',show=False)
p2 = plot(sin(10*x)/x**2,adaptive=False,nb_of_points=500,line_color='red',label='$sin(10x)/x^2$',show=False)

fig,ax = plt.subplots()
ax2 = ax.twinx()
move_sympyplot_to_axes(p1,is_twinx=False)
move_sympyplot_to_axes(p2,ax2,is_twinx=True)

ax2.tick_params(axis='y',colors='red')
ax2.set_ylabel('',color='red')
handles1,labels1 = ax.get_legend_handles_labels()
handles2,labels2 = ax2.get_legend_handles_labels()
plt.legend(handles1 + handles2,labels1 + labels2,loc='upper center')
plt.tight_layout()
plt.show()

example plot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?