【问题标题】:Put a kink in x axis in seaborn or matplotlib - python在 seaborn 或 matplotlib 中的 x 轴上放置一个扭结 - python
【发布时间】:2022-01-10 11:26:07
【问题描述】:

我到处搜索,但找不到解决方案,说明如何在 seaborn/matplotlib 中像图中所示那样在 x 轴上放置一个扭结

【问题讨论】:

  • 是否有任何断轴指示器足够好?因为在这种情况下,鉴于每个 Seaborn 图形都具有 Matplotlib,您可以从 example in the Matplotlib gallery 开始。
  • 你需要在matplotlib级别处理这个,你不能直接用更高级别的seaborn来处理
  • @9769953 您能否解释一下在给定上下文中如何在原始值和起始值之间需要中断的情况下执行此操作?上面解释了如何通过创建 ax1 和 ax2 在两个图形之间执行此操作。对不起,我对 matplotlib 有点陌生。
  • @mozway 已编辑问题。如果可能的话,你能解释一下如何在 matplotlib 中做到这一点吗?

标签: python matplotlib seaborn


【解决方案1】:

以下做法:

  • 隐藏表示现有 x 轴的 spine
  • 为零添加一个虚拟点(例如x=40
  • 为扭结画一些线,使用clip_on=False在主轴区域外绘制,ax.get_xaxis_transform()使用"data coordinates"x和“轴坐标”为y0在底部和顶部1);从书脊复制粗细和线条颜色
  • 将虚拟零位显示为0
import matplotlib.pyplot as plt
import numpy as np

data = np.random.randint(50, 89, 80)
bins = np.arange(50, data.max()+6, 5)
fig, ax = plt.subplots(figsize=(12,5))

ax.hist(data, bins=bins, fc='skyblue', ec='navy')
false_zero = bins[0] - 10
ax.set_xticks(np.append(false_zero, bins))
ax.set_xticklabels(np.append(0, bins))

for spine in ['top', 'right', 'bottom']:
    ax.spines[spine].set_visible(False)
ax.add_line(plt.Line2D(xdata=[false_zero, false_zero + 2, false_zero + 4, false_zero + 4, false_zero + 6, bins[-1] + 1],
                       ydata=[0, 0, 0.1, -0.1, 0, 0],
                       color=ax.spines['bottom'].get_edgecolor(), lw=ax.spines['bottom'].get_linewidth(),
                       clip_on=False, transform=ax.get_xaxis_transform()))
plt.tight_layout()
plt.show()

PS:对于原帖的纠结:

ax.add_line(plt.Line2D(xdata=[false_zero, false_zero + 2, false_zero + 2, false_zero + 6, false_zero + 6, bins[-1] + 1],
                       ydata=[0, 0, 0.1, -0.1, 0, 0], ...))

【讨论】:

  • 这能回答你的问题吗?
猜你喜欢
  • 2019-12-07
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 2017-09-03
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多