matplotlib绘制柱状图时,控制间距

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib绘制柱状图时,控制间距相关的知识,希望对你有一定的参考价值。

参考技术A 绘制柱状图时,如果横轴刻度名过程,文字之间容易发生重叠,如图所示:

网上博客的常用方法,修改bar的第一个参数,将每个柱子横坐标的值扩大二倍。
结果:没有变化,可能是受限于图表的大小,需要通过修改matplotlib的参数来解决

修改matplotlib的参数,增大图表大小,结果如图所示:

networkx:绘制多方图时的节点间距

【中文标题】networkx:绘制多方图时的节点间距【英文标题】:networkx: node spacing when plotting multipartite graph 【发布时间】:2021-01-26 02:42:10 【问题描述】:

我想使用networkx 绘制一个多重图。但是,当添加更多节点时,情节变得非常拥挤。有没有办法在节点和分区之间留出更多空间?

查看multipartite_layout 的文档,我找不到这个的参数。 当然,可以为位置创建复杂的公式,但由于multipartite_layout 的间距对于小图来说已经很好看,我是如何将其扩展到更大的图。

有没有人知道如何(有效地)做到这一点?

示例代码,生成具有三个分区的图:

import matplotlib.pyplot as plt
import networkx as nx


# build graph:
G = nx.Graph()
for i in range (0,30):
    G.add_node(i,layer=0)
for i in range (30,50):
    G.add_node(i,layer=1)
    for j in range(0,30):
        G.add_edge(i,j)
G.add_node(100,layer=2)
G.add_edge(40,100)

# plot graph
pos = nx.multipartite_layout(G, subset_key="layer",)
plt.figure(figsize=(20, 8))
nx.draw(G, pos,with_labels=False)
plt.axis("equal")
plt.show()

当前拥挤的情节:

【问题讨论】:

尝试删除 plt.axis('equal') - 这在类似的例子中对我有用 【参考方案1】:

nx.multipartite_layout 返回具有以下格式的字典:node: array([x, y])

我建议你试试pos = p:array_op(pos[p]) for p in pos,其中array_op是作用于每个节点位置的函数array([x, y])

在您的情况下,我认为沿 x 轴进行简单缩放就足够了,即

array_op = lambda x, sx: np.array(x[0]*sx, x[1]).

出于可视化目的,我想这应该与@JPM 的评论等效。但是,这种方法为您提供了获得实际转换位置数据的优势。

最后,如果这样的统一转换不能满足你的需要,你可以随时根据dict的格式手动操作位置(尽管它可能效率较低)。

【讨论】:

以上是关于matplotlib绘制柱状图时,控制间距的主要内容,如果未能解决你的问题,请参考以下文章

Python 之 Matplotlib 柱状图(竖直柱状图和水平柱状图)直方图和饼状图

Python matplotlib绘制条形柱状图并添加数据标签

matplotlib绘制柱状图数字后缀带万字怎么画图

超详细的Python matplotlib 绘制柱状图

在 Matplotlib 中,哪个轴属性指定刻度之间的间距? [复制]

matplotlib手册(5) - 柱状图