Matplotlib:使用 twinx 叠加时箱线图和条形图会发生变化

2023-12-01

当我创建条形图并使用 twin x 覆盖条形图时,与条形相比,框看起来向右移动了一位。

这个问题之前已经被识别过(Python pandas 绘制如果孪生两个 y 轴则移动 x 轴),但该解决方案似乎不再有效。 (我使用的是Matplotlib 3.1.0)

li_str = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']

df = pd.DataFrame([[i]+j[k] for i,j in {li_str[i]:np.random.randn(j,2).tolist() for i,j in \
    enumerate(np.random.randint(5, 15, len(li_str)))}.items() for k in range(len(j))]
    , columns=['A', 'B', 'C'])

fig, ax = plt.subplots(figsize=(16,6))
ax2 = ax.twinx()
df_gb = df.groupby('A').count()
p1 = df.boxplot(ax=ax, column='B', by='A', sym='')
p2 = df_gb['B'].plot(ax=ax2, kind='bar', figsize=(16,6)
    , colormap='Set2', alpha=0.3, secondary_y=True)
plt.ylim([0, 20])

The problematic chart

输出显示与条形相比,框向右移动了一位。上一篇文章的受访者正确地指出,条形的刻度位置是从零开始的,而方框的刻度位置是从一开始的,这导致了偏移。但是,那plt.bar()受访者用来修复它的方法现在会抛出错误,因为 x 参数已被强制执行。如果提供了 x 参数,它仍然会抛出错误,因为不再有参数“left”。

df.boxplot(column='B', by='A')
plt.twinx()
plt.bar(left=plt.xticks()[0], height=df.groupby('A').count()['B'],
  align='center', alpha=0.3)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-186-e257461650c1> in <module>
     26 plt.twinx()
     27 plt.bar(left=plt.xticks()[0], height=df.groupby('A').count()['B'],
---> 28         align='center', alpha=0.3)

TypeError: bar() missing 1 required positional argument: 'x'

此外,我更喜欢使用面向对象的方法并参考轴进行修复,因为我想将图表放入交互式 ipywidget 中。

这是理想的图表:

Ideal chart

非常感谢。


您可以使用以下技巧:提供 x 值以将条形图从x=1。为此,请使用range(1, len(df_gb['B'])+1)作为 x 值。

fig, ax = plt.subplots(figsize=(8, 4))
ax2 = ax.twinx()
df_gb = df.groupby('A').count()
df.boxplot(column='B', by='A', ax=ax)
ax2.bar(range(1, len(df_gb['B'])+1), height=df_gb['B'],align='center', alpha=0.3)

enter image description here

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

Matplotlib:使用 twinx 叠加时箱线图和条形图会发生变化 的相关文章

随机推荐

  • 如何从 Twitter 主题标签中删除 #?

    我想从 Twitter 哈希标签中删除 所以 Input I love winter and ice skating Output I love winter and ice skating 我以为这可以解决问题 但事实并非如此 tweet
  • 想要从列表视图中删除所选项目

    我使用列表和数组适配器将字符串放入列表视图中 现在我想删除选定的项目 我尝试过以下代码 但效果不佳 我怎样才能解决这个问题 这是我的代码 TextView t1 String temp mylist ListView findViewByI
  • 在 UITableViewCell 上的多个 AVPlayerItem 中添加和删除观察者

    我正在尝试制作一个播放多个视频的表格视图AVPlayer and AVPlayerItem我需要为每个添加观察者AVPlayerItem这样我就可以跟踪playbackLikelyToKeepUp 属性 我尝试但失败的是在设置后添加观察者A
  • 运算符||或 |不能使用

    我正在尝试编译此代码 但我的编译器 BlueJ 告诉我 无法应用于 java lang string java lang string import java io import javax swing JOptionPane class
  • 重复 std::vector 的内容

    假设我有一个简单类型的向量 可能很大 例如 std vector
  • 如何在 C# 中将 System.Decimal 位转换为字符串?

    我希望能够从System Decimalvalue 然后将其转换为该值的字符串表示形式 就像Decimal ToString 可以 但我很难想出算法 所以我有这样的事情 decimal d 1403 45433M int nDecimalB
  • SAP JBOSS 的 jar 问题

    我正在尝试使用 ABAP 函数调用将我的 J2EE 应用程序与 SAP 软件连接起来 当我在 Eclipse 中使用热编码值将其作为单个类运行时 它工作得很好 当我尝试在 JBoss 服务器中运行它时 我从前端获取一些值并将其传递给我的 J
  • 如何将数字传递给 .hideRow()?

    我从以下位置得到了以下脚本 Mike Grace 的网站 Deletes rows in the active spreadsheet that contain Yes in column A function readRows var s
  • 如何在 Windows 版 Git 客户端中对 TFS 服务器进行身份验证?

    我们在公司域上设置了 TFS 2017 服务器 我想使用 Windows CMD 行的 Git 从该 TFS 服务器上的存储库推送和提取代码 我已将必要的证书添加到本地商店 以便通过 SSL 障碍 但现在当我尝试将远程存储库克隆到我的域加入
  • 圆形 UIButton

    我想知道是否可以绘制圆形 UIButton 不是圆角矩形 当我在自定义类型的 UIButton 中添加圆形图像时 它看起来像一个圆形按钮 但在单击按钮时 按钮的边界变得可见 因此它看起来像一个方形按钮 然后当单击结束时 它又看起来像一个圆形
  • Selenium 代理服务器参数 - 未知错误:net::ERR_TUNNEL_CONNECTION_FAILED

    希望你一切都好 我在尝试设置 chrome webdriver 时遇到了一些问题 我正在尝试更改网络驱动程序的参数以轮换用户代理和 IP 我将其用于抓取目的并且不想获得具有相同 IP 和 UA 的位置 当我通过 UA 参数时 一切正常 但是
  • 如何使div可拖动

    如何使元素可以在两个 div 之间拖动 这似乎是可拖动的应该做的事情 但我无法使用我拥有的代码 在这个 jsfiddle 中 我有两个带有可拖动元素的 div 我想让一个元素从第一个 div 转到第二个 div 许多网站上都必须存在该功能
  • jQuery DOM 对象的 x y 文档坐标

    我需要获取 DOM 元素的 X Y 坐标 相对于文档的顶部 左侧 我找不到任何可以为我提供这些的插件或 jQuery 属性或方法 我可以获得 DOM 元素的顶部和左侧 但这可以相对于其当前容器 父级或文档 你可以使用方面插件 已弃用 包含在
  • React Native {NativeModules} 未在 M1/Silicon mac 上导入 - 返回空对象 {}

    我试图在一个开发的项目中创建一个 React native 本机模块 BankedSdk M1MacBook 但是 任何初始化模块的尝试都会返回一个空对象 这是适用于我的示例 2020 存储库intel机器 https github com
  • Java 中的 PHP strtotime() ?

    我正在寻找一种简单的方法来从用户可能输入的任何类型的时间输入生成MySQL DATETIME PHP 的 strtotime 函数使这一切变得简单 它可以执行以下操作 strtotime 2004 02 12T15 19 21 00 00
  • Oracle:将字段标准化为 CSV 字符串

    我有一些一对多标准化数据 如下所示 a x a y a z b i b j b k 什么查询将返回数据 使得 多 端表示为 CSV 字符串 a x y z b i j k Mark 如果您使用的是版本 11gR2 而谁不是 那么您可以使用
  • 在VBA中重复随机变量

    如何使用 randomize 和 rnd 来获取随机变量的重复列表 通过重复列表 我的意思是 如果您运行循环来获取 10 个随机数 则列表中的每个随机数都将是唯一的 此外 如果再次运行该序列 您将获得与之前相同的 10 个随机数 来自微软自
  • Python 自定义比较器如何工作?

    我有以下 Python 字典 2 3 4 5 3 1 0 0 0 1 4 1 10 1 2 3 现在我想根据字典值的值之和对它们进行排序 因此对于第一个键 值之和为 3 4 5 12 我编写了以下代码来完成这项工作 def myCompar
  • Qt:制作不同颜色的堆叠条形图[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在尝试在 Qt 中制作一个时间线 其中不同的颜色代表不同的任务 最终 它应该看起来有点像这样 但只有一行 现在有人知道如何在不安装额外库的情况下仅使用 QPaint 来做到这一点
  • Matplotlib:使用 twinx 叠加时箱线图和条形图会发生变化

    当我创建条形图并使用 twin x 覆盖条形图时 与条形相比 框看起来向右移动了一位 这个问题之前已经被识别过 Python pandas 绘制如果孪生两个 y 轴则移动 x 轴 但该解决方案似乎不再有效 我使用的是Matplotlib 3