Matplotlib 颜色条移动第二个 x 轴

2023-12-15

我正在尝试使用以下命令将第二个 x 轴添加到绘图的顶部twiny.

如果我制作一个没有颜色条的简单散点图,则顶部 x 轴与底部 x 轴正确对齐(MWE 如下):

enter image description here

如果我添加一个颜色条,顶部的 x 轴就会发生位移:

enter image description here

我怎样才能解决这个问题?


MWE

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib.gridspec as gridspec


X = np.array([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4.])
X2 = np.array([122, 85, 63, 50, 23, 12, 7, 5, 2])
Y = np.cos(X*20)
Z = np.sin(X*20)

fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
ax1 = plt.subplot(gs[1])
ax2 = ax1.twiny()

ax1.set_xlim(-0.2, max(X)+0.2)
plt.tick_params(axis='both', which='major', labelsize=10)
ax1.minorticks_on()
ax1.grid(b=True, which='major', color='gray', linestyle='--', lw=0.3)

SC = ax1.scatter(X, Y, c=Z)
ax1.set_xlabel("Original x-axis")

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(X)
ax2.set_xticklabels(X2)
ax2.set_xlabel("Second x-axis")

# Colorbar.
the_divider = make_axes_locatable(ax1)
color_axis = the_divider.append_axes("right", size="2%", pad=0.1)
cbar = plt.colorbar(SC, cax=color_axis)
cbar.set_label('B', fontsize=10, labelpad=4, y=0.5)
cbar.ax.tick_params(labelsize=10)

plt.show()

您可以让颜色条“窃取”空间不止一把斧头

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib.gridspec as gridspec

X = np.array([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4.])
X2 = np.array([122, 85, 63, 50, 23, 12, 7, 5, 2])
Y = np.cos(X*20)
Z = np.sin(X*20)

fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
ax1 = plt.subplot(gs[1])
ax2 = ax1.twiny()

ax1.set_xlim(-0.2, max(X)+0.2)
plt.tick_params(axis='both', which='major', labelsize=10)
ax1.minorticks_on()
ax1.grid(b=True, which='major', color='gray', linestyle='--', lw=0.3)

SC = ax1.scatter(X, Y, c=Z, cmap='viridis')
ax1.set_xlabel("Original x-axis")

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(X)
ax2.set_xticklabels(X2)
ax2.set_xlabel("Second x-axis")

# Colorbar.
cbar = plt.colorbar(SC, ax=[ax1, ax2])
cbar.set_label('B', fontsize=10, labelpad=4, y=0.5)
cbar.ax.tick_params(labelsize=10)

plt.show()

我认为这会解除您的用例的阻塞。

限制有点不同,因为我坐在当前的主分支上。

enter image description here

如果您需要使用tight_layout像这样的东西(这需要对填充等进行一些调整):

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec


X = np.array([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4.])
X2 = np.array([122, 85, 63, 50, 23, 12, 7, 5, 2])
Y = np.cos(X*20)
Z = np.sin(X*20)

fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
right_gs = gridspec.GridSpecFromSubplotSpec(1, 2, width_ratios=[30, 1], subplot_spec=gs[1], wspace=0.05)

ax1 = fig.add_subplot(right_gs[0])
color_axis = fig.add_subplot(right_gs[1])



ax2 = ax1.twiny()

ax1.set_xlim(-0.2, max(X)+0.2)
plt.tick_params(axis='both', which='major', labelsize=10)
ax1.minorticks_on()
ax1.grid(b=True, which='major', color='gray', linestyle='--', lw=0.3)

SC = ax1.scatter(X, Y, c=Z, cmap='viridis')
ax1.set_xlabel("Original x-axis")

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(X)
ax2.set_xticklabels(X2)
ax2.set_xlabel("Second x-axis")

cbar = fig.colorbar(SC, cax=color_axis)
cbar.set_label('B', fontsize=10, labelpad=4, y=0.5)
cbar.ax.tick_params(labelsize=10)

fig.tight_layout()
plt.show()

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib 颜色条移动第二个 x 轴 的相关文章

随机推荐

  • 如何解决由于 Anaconda 和 Homebrew 造成的潜在冲突?

    我在 OSX 中安装了 Anaconda 和 Homebrew Homebrew 提供以下诊断 解决 Anaconda 和 Homebrew 之间潜在冲突的最佳方法是什么 应该如何管理他们才不会给彼此带来问题 brew doctor Ple
  • 如何告诉 elm 外部 DOM 的变化

    我正在使用 elm 0 17 1 并尝试与 select2 javascript 库 版本 4 0 3 进行互操作 这是我的 Main elm port module Main exposing import Html exposing H
  • 使用枚举的策略模式。需要一个简单的Java示例[重复]

    这个问题在这里已经有答案了 我试图理解java中的策略模式和枚举 我用谷歌搜索了这个并找到了一些关于这个主题的文章 但其中大多数对于我的理解来说似乎太复杂了 任何人都可以提供一个简单的示例或另一个链接 以使用 java 的外行术语演示使用枚
  • 使用 AVPlayer 流式传输 mp3 音频

    我听到一些关于此事的相互矛盾的报道 我想做的是从 URL 流式传输 mp3 文件 我已经做了几个小时的研究 但我找不到任何关于如何做到这一点的好的指南 甚至我应该使用哪种音频播放器 有些朋友告诉我 AVPlayer 可以流式传输 mp3 但
  • 如何将自定义函数累积应用于 R 中的向量?以高效且惯用的方式?

    我知道这个功能cumsum在 R 中计算其向量参数的累积和 我需要 累积应用 不是求和函数 而是通用函数 在我的具体情况下 quantile功能 我当前的解决方案基于循环 set seed 42 df lt data frame measu
  • JavaScript:正则表达式 CamelCase 到句子

    我发现了这个例子将驼峰命名法更改为破折号 我已经修改了代码 将 CamelCase 更改为 Sentencecase 并使用空格而不是破折号 它工作正常 但不适用于单个单词字母 例如 i 和 a 有什么想法如何将其纳入其中吗 thisIsA
  • 挑战:如何使用 Python 一秒内发送超过 1000 个 HTTP 请求

    考虑以下情况 有一个缓慢的服务器 使用大约200ms处理请求 不包括网络传输时间 现在 我们需要每秒发送一堆请求 读完这篇文章后post 我尝试过多线程 多进程 twisted agent request 和eventlet 但最大的加速只
  • 在postgres中查询json

    我必须从包含空间信息的 json 文件中提取数据 该文件的内容是 vertices lat 46 744628268759314 lon 6 569952920654968 lat 46 74441692818192 lon 6 57048
  • MySQL 查询使用 CASE 来 SELECT 多列

    我有以下可以正确运行的查询 SELECT Future enemy type CASE WHEN Future enemy type square THEN Users color ELSE END AS color CASE WHEN F
  • R 将整数更改为三个整数

    我有这个号码 20101213这是该数据的表示2010 Dec 13th我想从该数字中提取年 月和日数字 所以我应该让三个变量包含这些值 我尝试过的 value 20101213 as numeric strsplit as charact
  • 如何禁用 Angular JS 中的选项?

    I have ng repeat option
  • Celery period_task 并行运行多次

    我有一些使用 Celery 线程的非常简单的周期代码 它只是打印 Pre 和 Post 并在中间休眠 它改编自这个 StackOverflow 问题 and 这个链接网站 from celery task import task from
  • Powershell:将 xml 更改保存在新的 xml 变量或对象中,保持原始对象不变

    我有一个从中获取的 xml 变量Invoke restmethod 我们称之为 object1 我想创建一个新变量或对象 object2那是一样的 object1但对值进行了一些更改 这是我尝试过的 object2 object1 obje
  • C 中的“向后”条件[重复]

    这个问题在这里已经有答案了 我正在查看一些代码 发现一些奇怪的条件 即 if NULL buf 我想知道这样写条件是否有特殊原因 而不是 if buf NULL 我从头到尾看不出有任何理由这样做 但我不认为这是一个错误 对我来说 似乎他们完
  • 在 Perl 中如何将字符串转换为与自身匹配的正则表达式?

    在 Perl 中如何将字符串转换为与自身匹配的正则表达式 我有一组像这样的字符串 Enter your selection Enter Code Navigate Abandon Copy Exit 我想将它们转换为正则表达式 以便我可以将
  • JavaScript 中不同语法错误的不同行为

    我不是 JavaScript 程序员 所以这可能是一个非常基本的问题 问题是当出现一些特定的语法错误时 整个 JS 代码将无法工作 由于 JS 是被解释的 我认为它应该独立执行每一行 直到错误发生 但它似乎没有发生 至少在下面的情况下 co
  • 获取堆栈帧的运行时类型

    我想知道是否可以在堆栈跟踪中获取方法调用者的运行时类型 考虑以下示例 class Parent public void Foo var stack new StackTrace foreach var frame in stack GetF
  • Swift 3:UITextView - 动态高度 - 以编程方式

    我有一个 KeyboardContainer 类 UIView 的子类 以编程方式创建 因此没有故事板 包括一个 UITextView 供用户在其中键入消息 它在聊天日志类中使用 并设置为 inputAccessoryView 我想在用户打
  • 为什么在 ARM 汇编中使用 LDR 而不是 MOV(反之亦然)?

    我正在浏览这个教程 http www cl cam ac uk freshers raspberrypi tutorials os ok01 html 第一道装配线是 ldr r0 0x20200000 第二个是 mov r1 1 我想ld
  • Matplotlib 颜色条移动第二个 x 轴

    我正在尝试使用以下命令将第二个 x 轴添加到绘图的顶部twiny 如果我制作一个没有颜色条的简单散点图 则顶部 x 轴与底部 x 轴正确对齐 MWE 如下 如果我添加一个颜色条 顶部的 x 轴就会发生位移 我怎样才能解决这个问题 MWE i