麻烦对齐matplotlib twinx轴的滴答声

时间:2017-07-11 14:27:20

标签: python matplotlib

我创建了一个有2个y轴的matplotlib图。 y轴有不同的比例,但我希望对齐和网格对齐。我从excel文件中提取数据,因此无法预先知道最大限制。我试过以下代码。

# creates double-y axis
ax2 = ax1.twinx()

locs = ax1.yaxis.get_ticklocs()
ax2.set_yticks(locs) 

现在的问题是ax2上的刻度不再有标签了。谁能给我一个很好的方法来对齐不同尺度的蜱?

2 个答案:

答案 0 :(得分:12)

对齐两个不同比例的刻度位置意味着放弃好的自动刻度定位器,并将刻度设置为次轴上与原始刻度相同的位置。

这个想法是使用函数建立两个轴刻度之间的关系,并将第二个轴的刻度设置在第一个轴的位置。

enter image description here

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { NavComponent } from './nav';

@NgModule({
  declarations: [
    NavComponent,
  ],
  imports: [
    IonicPageModule.forChild(NavComponent),
  ],
  exports: [
    NavComponent
  ]
})
export class NavComponentModule {}

请注意,这是针对一般情况的解决方案,并且可能导致完全不可读的标签取决于用例。如果您碰巧有关于轴范围的更多先验信息,则可能有更好的解决方案。

另请参阅this question以了解牺牲第一轴的自动刻度位置以便更轻松设置次轴刻度位置的情况。

答案 1 :(得分:1)

对于任何想知道的人(以及供我将来参考),ImportanceofBeingErnest答案中的lambda函数f通过以下方式将输入的左勾号映射到相应的右勾号:

RHS刻度=底部RHS刻度+(LHS范围的百分比* RHS范围)

请参阅this question on tick formatting截断小数位:

from matplotlib.ticker import FormatStrFormatter

ax2.yaxis.set_major_formatter(FormatStrFormatter('%.2f')) # ax2 is the RHS y-axis