在SecondaryAxis上绘制网格线-Matplotlib

泽维尔

问题

我正在尝试从我的SecondaryAxis的刻度线绘制网格线

ax2.grid(color=color,linestyle='--')

图上没有任何显示,我相信我的情况与Format SecondaryAxis ticklabels Matplotlib的情况相同,不是吗?

但是,有人在不改变比例的情况下可以解决此问题吗?我的意思是,反转比例是在主轴上具有百分比比例,在次级轴上具有普通比例。

完整代码

import matplotlib.pyplot as plt
import numpy as np

#generate dummy load duration curve
dur=2500
load = np.random.normal(60,30,dur+1)
load[::-1].sort()

x=range(0,dur+1)

perticks = np.linspace(0,1,11)
xticks = perticks*dur

# get yticks from xticks
yticks = np.interp(xticks, range(0,dur+1), load)
print(yticks)

# create figure object with axe object
fig, ax1 = plt.subplots(figsize=(16, 8))
ax1.plot(x, load)

#create second axis
ax2 = ax1.secondary_yaxis('right')

# label and color of the secondaryaxis 
perlabels = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%']
color ='tab:blue'

ax2.set_yticks(yticks)
ax2.set_yticklabels(labels=perlabels)
ax2.tick_params(axis='y', color=color, labelcolor=color)

# draw grid lines on the secondaryaxis
ax2.grid(color=color,linestyle='--')

# do the same for x axis
ax3 = ax1.secondary_xaxis('top')

ax3.set_xticks(xticks)
ax3.set_xticklabels(labels=perlabels)
ax3.tick_params(axis='x', color=color, labelcolor=color)

ax3.grid(color=color,linestyle='--')

输出

没有网格线的情节

np8

我对此主题进行了深入研究,并在GitHub上发布了一个问题这是我发现的:

  • secondaryAxis是在matplotlib 3.1.0中添加的“相当新的东西”。(2019年5月)。甚至v.3.3.3文档都说secondary_xaxis()方法是实验性的。
  • SecondaryAxis继承_AxesBase,这是一个“实现细节”。不应该(从v.3.3.3版本开始)作为Axes对象工作,并且SecondaryAxis.grid()不应该绘制对象(就像_AxesBase.grid()那样)。虽然,我同意存在一种无效的方法是一种误导。
  • 因此,在撰写本文时,.grid()仅假定在primaxy轴上工作。

将蓝色轴设为主要

  • 由于.grid()仅适用于非次级轴,因此请将主轴设为蓝色,然后将其移至顶部和右侧。

# Take the x and y-ticks for transfering them to secondary axis
xticks_orig = ax1.get_xticks()
yticks_orig = ax1.get_yticks()

# Make the primary axis blue since we want to draw grid on it
ax1.xaxis.tick_top()
ax1.yaxis.tick_right()
ax1.set_xticks(xticks)
ax1.set_yticks(yticks)
ax1.set_yticklabels(labels=perlabels)
ax1.set_xticklabels(labels=perlabels)
ax1.tick_params(axis="both", color=color, labelcolor=color)
ax1.grid(color=color, linestyle="--")

# Draw the black secondary axis
ax2 = ax1.secondary_yaxis("left")
ax3 = ax1.secondary_xaxis("bottom")
ax2.set_yticks(yticks_orig)
ax3.set_xticks(xticks_orig)

例

手动添加网格线

您也可以像这样手动添加网格线

xlim = ax1.get_xlim()
for y in ax2.get_yticks():
    ax1.plot(xlim, (y, y), ls="--", color=color, lw=0.5)
ax1.set_xlim(xlim)

ylim = ax1.get_ylim()
for x in ax3.get_xticks():
    ax1.plot((x, x), ylim, ls="--", color=color, lw=0.5)
ax1.set_ylim(ylim)

输出如下所示:

在此处输入图片说明

现在的区别在于,我们在图形上绘制了看起来像网格线的线。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整Matplotlib imshow中的网格线和刻度线

来自分类Dev

无法使较小的网格线出现在matplotlib图中

来自分类Dev

matplotlib:matshow在图像顶部有网格线

来自分类Dev

matplotlib中未显示原始的主要网格线

来自分类Dev

jQuery在元素上绘制网格线

来自分类Dev

删除网格线,但保留框架(matplotlib中的ggplot2样式)

来自分类Dev

使用Seaborn将较小的网格线添加到Matplotlib图中

来自分类Dev

用Matplotlib绘制网格

来自分类Dev

用Matplotlib绘制网格

来自分类Dev

在Cartopy地图中绘制网格线

来自分类Dev

如何绘制比例缩放的网格线?

来自分类Dev

Matplotlib-在同一图表上绘制多条线

来自分类Dev

Matplotlib:将网格线保留在图形后面,但将y和x轴保留在上方

来自分类Dev

使用matplotlib,如何将xlabels移到顶部并在网格线之间将所有标签居中?

来自分类Dev

Matplotlib:将网格线保留在图形后面,但将y和x轴保留在上方

来自分类Dev

在matplotlib中,有没有一种方法可以将网格线设置在小节/线/面之下,同时保持刻度线在上面?

来自分类Dev

在matplotlib中绘制网格图案

来自分类Dev

WPF在画布面板背景上绘制彩色的网格线

来自分类Dev

以可变的相交线绘制对角网格线

来自分类Dev

辅助轴上的网格线

来自分类Dev

在matplotlib中设置网格线上的点之间的距离

来自分类Dev

JavaFx 2.x:如何绘制较小的网格线

来自分类Dev

d3-在指定位置绘制网格线

来自分类Dev

如何仅使用pcolor / pcolormesh绘制网格线

来自分类Dev

如何启用/绘制JointJS图的网格线

来自分类Dev

如何在绘图后使用grid()绘制网格线?

来自分类Dev

在pyplot中绘制网格线和数据的顺序

来自分类Dev

如何在Matlab中绘制不同间距的网格线

来自分类Dev

在 Mathematica 中绘制多条网格线并给出单独的标签

Related 相关文章

  1. 1

    调整Matplotlib imshow中的网格线和刻度线

  2. 2

    无法使较小的网格线出现在matplotlib图中

  3. 3

    matplotlib:matshow在图像顶部有网格线

  4. 4

    matplotlib中未显示原始的主要网格线

  5. 5

    jQuery在元素上绘制网格线

  6. 6

    删除网格线,但保留框架(matplotlib中的ggplot2样式)

  7. 7

    使用Seaborn将较小的网格线添加到Matplotlib图中

  8. 8

    用Matplotlib绘制网格

  9. 9

    用Matplotlib绘制网格

  10. 10

    在Cartopy地图中绘制网格线

  11. 11

    如何绘制比例缩放的网格线?

  12. 12

    Matplotlib-在同一图表上绘制多条线

  13. 13

    Matplotlib:将网格线保留在图形后面,但将y和x轴保留在上方

  14. 14

    使用matplotlib,如何将xlabels移到顶部并在网格线之间将所有标签居中?

  15. 15

    Matplotlib:将网格线保留在图形后面,但将y和x轴保留在上方

  16. 16

    在matplotlib中,有没有一种方法可以将网格线设置在小节/线/面之下,同时保持刻度线在上面?

  17. 17

    在matplotlib中绘制网格图案

  18. 18

    WPF在画布面板背景上绘制彩色的网格线

  19. 19

    以可变的相交线绘制对角网格线

  20. 20

    辅助轴上的网格线

  21. 21

    在matplotlib中设置网格线上的点之间的距离

  22. 22

    JavaFx 2.x:如何绘制较小的网格线

  23. 23

    d3-在指定位置绘制网格线

  24. 24

    如何仅使用pcolor / pcolormesh绘制网格线

  25. 25

    如何启用/绘制JointJS图的网格线

  26. 26

    如何在绘图后使用grid()绘制网格线?

  27. 27

    在pyplot中绘制网格线和数据的顺序

  28. 28

    如何在Matlab中绘制不同间距的网格线

  29. 29

    在 Mathematica 中绘制多条网格线并给出单独的标签

热门标签

归档