当前位置: 首页 > 知识库问答 >
问题:

调整matplotlib中记号标签a之间的间距

巫新知
2023-03-14

我基于matplotlib中的:热图和pcolor?

我了解了如何在Matplotlib中更改记号标签和轴标签之间的分隔,但这不是我所需要的

如何固定标签的位置,使其与刻度对齐?

#!/usr/bin/python

import matplotlib.pyplot as plt
import numpy as np
import random
in_path = '/path/to/data'
in_file = open(in_path,'r').read().split('\r')
wd = '/'.join(in_path.split('/')[:-1]) + '/'
column_labels = [str(random.random()) + '_dsiu' for i in in_file[0].split('\t')[2:]]
row_labels = []


#Organize data for matrix population
D_cyano_counts = {}
for line in in_file[2:]:
    t = line.split('\t')
    D_cyano_counts[(t[0],t[1])] = [int(x) for x in t[2:]]


#Populate matrix
matrix = []
for entry in sorted(D_cyano_counts.items(), key = lambda x: (np.mean([int(bool(y)) for y in x[-1]]), np.mean(x[-1]))):#, np.mean(x[-1]))):
    (taxon_id,cyano), counts = entry
    normalized_counts = []
    for i,j in zip([int(bool(y)) for y in counts], counts):
        if i > 0:
            normalized_counts.append(i * (5  + np.log(j)))
        else:
            normalized_counts.append(0)

    #Labels
    label_type = 'species'
    if label_type == 'species': label = cyano
    if label_type == 'taxon_id': label = taxon_id
    row_labels.append(str(random.random()))

    #Fill in matrix
    matrix.append(normalized_counts)
matrix = np.array(matrix)

#Fig
fig, ax = plt.subplots()
heatmap = ax.pcolor(matrix, cmap=plt.cm.Greens, alpha = 0.7)
#Format
fig = plt.gcf()
#
ax.set_frame_on(False)
#
font = {'size':3}
ax.xaxis.tick_top()
ax.set_xticks([i + 0.5 for i in range(len(column_labels))])
ax.set_yticks([i + 0.5 for i in range(len(row_labels))])
ax.set_xticklabels(column_labels, rotation = (45), fontsize = 10, va='bottom')#, fontweight = 'demi')
ax.set_yticklabels(row_labels, fontsize = 9, fontstyle='italic')

cbar = plt.colorbar(heatmap)
help(ax.set_xticklabels)
ax.margins(x=0.01,y=0.01)
fig.set_size_inches(20, 13)
plt.savefig('figure.png')

共有1个答案

袁翔
2023-03-14

在您的案例中,您必须将标签的水平对齐设置为左边。默认情况下,它们居中。来自@Jean-Sébastien的链接包含您的答案

ax.set_xticklabels(column_labels, rotation = (45), fontsize = 10, va='bottom', ha='left')
 类似资料:
  • 我试图使用matplotlib构建一个信息图表,我想左对齐所有y轴的刻度标签。 我想把所有的刻度标签移到左边——我想让它们都从与哥伦比亚特区相同的x位置开始。 我试图使用做到这一点,但我不知道如何做到这一点。

  • Vaadin布局有一个方法将小部件彼此分开。在大多数情况下都很有效。但是在多个表对象的情况下,它们仍然有点过于拥挤。

  • 2个使用下划线标签包裹的HTML的ruby标签,为什么中间会有间隔? 如题: 我想让「源義経」这三个字的下划线能连续起来,现在不知道什么原因,中间断开了

  • 原关闭原因未解决 我用这些代码创建了3个水平条形图。正如你所看到的,在所有图表上,y标签之间的行间距是非常一致的,因为每个图形的高度都是独立定制的。 但是这些数字没有水平排列,因为y标签的文本长度不同。因此,我使用子图来对齐图形,如下所示: 但这种技术破坏了每个子图中y标签之间的行间距。有没有人有更好的主意来使所有子图上的y标签之间的行间距均匀,比如第一张图像?谢啦

  • 问题内容: 我希望降低不同子地块上的刻度标签密度 结果呢![输入图像描述] 这里 我想减少上面两个子地块的记号标签。怎么做 ? 谢谢。 奖励:1)如何去除条形图上y=0的虚线? 2) 如何去除子图0和1之间的x-trick标签?3) 如何设置 后面的情节要透明吗?(请参见右下角断开的y轴线。) 消失在情节背后) 问题答案: 您可以像设置xticks一样,将记号设置到您想要的位置。 这将为ax0子批

  • 我试图在传单中的标记(从JSON数据生成)之间插入行。我看到了一个示例,但它不能使用JSON数据。我能看到标记,但没有线条出现。 我的JSON数据: