首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >matplotlib barh:如何在两组条之间创建视觉间隙?

matplotlib barh:如何在两组条之间创建视觉间隙?
EN

Stack Overflow用户
提问于 2021-04-24 16:43:20
回答 2查看 50关注 0票数 1

我有一些排序后的数据,我只在图中显示最高和最低的值。这是我目前所拥有的最小版本:

代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pyplot as plt

# some dummy data (real data contains about 250 entries)
x_data = list(range(98, 72, -1))
labels = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
ranks = list(range(1, 27))

fig, ax = plt.subplots()

# plot 3 highest entries
bars_top = ax.barh(labels[:3], x_data[:3])
# plot 3 lowest entries
bars_bottom = ax.barh(labels[-3:], x_data[-3:])

ax.invert_yaxis()

# print values and ranks
for bar, value, rank in zip(bars_top + bars_bottom,
                            x_data[:3] + x_data[-3:],
                            ranks[:3] + ranks[-3:]):
    y_pos = bar.get_y() + 0.5
    ax.text(value - 4, y_pos, value, ha='right')
    ax.text(4, y_pos, f'$rank:\ {rank}$')

ax.set_title('Comparison of Top 3 and Bottom 3')
plt.show()

结果:

我想在这个图上再加一个空白点,以便更直观地说明大多数数据实际上并没有显示在这个图中。例如,像下面这样非常简单的东西就足够了:

这在matplotlib中是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-24 17:07:17

这是一种灵活的方法,只需在中间绘制一个虚拟条形图。yaxis变换和虚线的位置一起用来绘制3个黑点。

如果需要多个分隔符,它们都需要不同的虚拟标签,例如重复空格字符。

代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np

# some dummy data (real data contains about 250 entries)
x_data = list(range(98, 72, -1))
labels = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
ranks = list(range(1, 27))

fig, ax = plt.subplots()

# plot 3 highest entries
bars_top = ax.barh(labels[:3], x_data[:3])
# dummy bar inbetween
dummy_bar = ax.barh(" ", 0, color='none')
# plot 3 lowest entries
bars_bottom = ax.barh(labels[-3:], x_data[-3:])

ax.invert_yaxis()

# print values and ranks
for bar, value, rank in zip(bars_top + bars_bottom,
                            x_data[:3] + x_data[-3:],
                            ranks[:3] + ranks[-3:]):
    y_pos = bar.get_y() + 0.5
    ax.text(value - 4, y_pos, value, ha='right')
    ax.text(4, y_pos, f'$rank:\ {rank}$')

# add three dots using the dummy bar's position
ax.scatter([0.05] * 3, dummy_bar[0].get_y() + np.linspace(0, dummy_bar[0].get_height(), 3),
           marker='o', s=5, color='black', transform=ax.get_yaxis_transform())

ax.set_title('Comparison of Top 3 and Bottom 3')
ax.tick_params(axis='y', length=0) # hide the tick marks
ax.margins(y=0.02) # less empty space at top and bottom
plt.show()

票数 1
EN

Stack Overflow用户

发布于 2021-04-24 18:05:31

下面的函数,

代码语言:javascript
运行
AI代码解释
复制
def top_bottom(x, l, n, ax=None, gap=1):
    from matplotlib.pyplot import gca

    if n <= 0 : raise ValueError('No. of top/bottom values must be positive') 
    if n > len(x) : raise ValueError('No. of top/bottom values should be not greater than data length')
    if n+n > len(x):
        print('Warning: no. of top/bottom values is larger than one'
              ' half of data length, OVERLAPPING')
    if gap < 0 : print('Warning: some bar will be overlapped')
        
    ax = ax if ax else gca()
    
    top_x = x[:+n]
    bot_x = x[-n:]
    top_y = list(range(n+n, n, -1))
    bot_y = list(range(n-gap, -gap, -1))
    top_l = l[:+n] # A B C
    bot_l = l[-n:] # X Y Z

    top_bars = ax.barh(top_y, top_x)
    bot_bars = ax.barh(bot_y, bot_x)

    ax.set_yticks(top_y+bot_y)
    ax.set_yticklabels(top_l+bot_l)

    return top_bars, bot_bars

当与数据和n=4一起调用时,gap=4

代码语言:javascript
运行
AI代码解释
复制
bars_top, bars_bottom = top_bottom(x_data, labels, 4, gap=4)

产生

稍后,您将能够使用该函数返回的Artists根据自己的喜好定制工具栏的外观。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67245180

复制
相关文章
POSTGIS 总结
PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
小石头
2022/11/10
6.3K0
POSTGIS 总结
sqlserver查询数据库中有多少个表
 SELECT * FROM sysobjects WHERE (xtype = 'U')
jamesjiang
2022/11/20
1.1K0
一篇文章带你玩转PostGIS空间数据库
人类理解世界其实是按照三维的角度,而传统的关系型数据库是二维的,要想描述空间地理位置,点、线、面,我们就需要一个三维数据库,即所谓空间数据库。
半旧518
2023/10/17
8.2K0
一篇文章带你玩转PostGIS空间数据库
统计一行字符中有多少个单词
#include <stdio.h> //只能是单词之间一个空格 int words(char string[]) { int result = 0, i = 0; while(string[i] != 0) { if(string[i++] == ' ') { result++; } } if(string[0] != 0) result++; return result; } //更加好 int words_2(char str[]) { int i = 0
用户4645519
2020/09/07
5380
PostGIS特性
比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。
cn華少
2018/09/11
1.7K0
365. 二进制中有多少个1
思路一:遍历每一位,如果是1,计数器加1即可,也是最容易想到的,需要遍历一次,可以用不断除2来做,也可以用位操作,后者更简单些:
和蔼的zhxing
2018/09/04
5320
LintCode 二进制中有多少个1题目分析
这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0 为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的角度讲,n相当于在n - 1的最低位加上1。举个例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二进制表示中最右边的1(也就是最低位的1)
desperate633
2018/08/22
2140
PostGIS初探
PostGIS是PostgreSQL的空间扩展,他使得PostgreSQL支持空间数据类型,比如点、线段、折线段、多边形、椭圆等等,并且能够使用高效的空间索引进行存储和查找。
mythsman
2022/11/14
1.1K0
LintCode-365.二进制中有多少个1
给定 32 (100000),返回 1 给定 5 (101),返回 2 给定 1023 (111111111),返回 9
悠扬前奏
2019/05/31
3880
计算几何之判断线段相交
两条线段都满足“另一条线段的两个端点分别位于当前线段的顺时针方向和逆时针方向”,那么这两条线段相交。
灯珑LoGin
2022/10/31
4890
PostGIS空间数据库简明教程
在本文中,我们将介绍 PostGIS 的一些基础知识及其功能,以及一些可用于简化解决方案或提高性能的提示和技巧。
用户1758543
2023/05/09
3.1K0
PostGIS空间数据库简明教程
【实战】如何通过PostGIS实现附近的人
|导言:PostGIS是业界功能最全面,能力最强大的空间地理数据库引擎。现实业务开发中,经常会遇到有附近的某某的需求,如何快速实现呢,PostGIS+PostgreSQL可以帮到你。
腾讯云数据库 TencentDB
2021/11/15
2.1K0
【实战】如何通过PostGIS实现附近的人
一个.java文件中有多少个类(不是内部类)?
归思君
2023/10/16
3330
一个.java文件中有多少个类(不是内部类)?
计算还可以输入多少个字
Demo html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <ti
joshua317
2018/04/16
7460
计算几何之线段相交问题(平面扫描)
求n条线段的交点,可以用抽选配对的方式来遍历所有的情况,这样子时间复杂度为O(n2).
灯珑LoGin
2022/10/31
1K0
计算几何之线段相交问题(平面扫描)
HDU 1086 计算几何 判断线段相交
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6456    Accepted Submission(s): 3116
csxiaoyao
2019/02/18
5660
PostGIS 报错libcrypto[通俗易懂]
centOS7.4 postgresql版本12,小版本号会随官方更新;遇到问题的是12.5 postgis2.5
全栈程序员站长
2022/09/13
1.3K0
整数的二进制表示中有多少个1的问题
我在剑指offer上面看到这道题,看到这道题是用c++写的,但是我用java编写的时候遇到问题。
actionzhang
2022/11/30
2990
geotools实现两个shp的相交计算
在Armap工具箱‘分析工具->叠加分析’,不得不说,非常好用,本文给你讲讲如何在geotools中实现。
牛老师讲GIS
2018/10/23
2K0
geotools实现两个shp的相交计算
如何在Ubuntu 14.04上安装和配置PostGIS
PostGIS是PostgreSQL关系数据库的空间扩展。PostGIS允许您使用几何和地理数据类型存储空间数据,使用空间函数执行空间查询以确定区域,距离,长度和周长,并在数据上创建空间索引以加速空间查询。
灬半痴
2018/09/28
1.6K0

相似问题

位置固定div缩小时去远

10

缩放时固定div位置

10

固定div位置

13

Div位置固定

24

位置DIV,位置绝对高于DIV,位置固定

05
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文