水平条形图:调整y轴标签大小

3

使用 Pandas 软件包制作一个水平条形图,但 Y 轴标签被截断了。我使用了以下数据:

Term                                                           value
GO:0043232~intracellular non-membrane-bounded organelle    69.40887024
GO:0043228~non-membrane-bounded organelle                  68.41919153
GO:0051384~response to glucocorticoid stimulus              58.50901338
hsa04310:Wnt signaling pathway                             24.56895837
GO:0016055~Wnt receptor signaling pathway                   18.00929324
GO:0042127~regulation of cell proliferation             5.215295969

对于y轴标签,我使用了“Term”列。
我的代码如下:
    a=list(final_table['value'])
    b=list(final_table['Term'])
    data=pd.DataFrame(a,index=b,columns=['value'])
    data[:31].plot(kind='barh',color='k',alpha=0.7)
    matplotlib.pyplot.savefig('test.png')

一个水平条形图的例子如下:绘图 我该如何解决这个问题?除了保存图像之外,我还尝试使用pandas和XlsxWriter在Excel文件中绘制和写入图表(pandas和XlsxWriter),但是似乎XlsxWriter没有绘制水平条形图的功能。

在XlsxWriter中可以绘制水平条形图 - jmcnamara
1个回答

3
你可以这样做:
In [1]: data
Out[1]: 
                                                             value
Term                                                              
GO:0043232~intracellular non-membrane-bounded organelle  69.408870
GO:0043228~non-membrane-bounded organelle                68.419192
GO:0051384~response to glucocorticoid stimulus           58.509013
hsa04310:Wnt signaling pathway                           24.568958
GO:0016055~Wnt receptor signaling pathway                18.009293
GO:0042127~regulation of cell proliferation               5.215296


In [2]: data.plot(kind="barh", fontsize=9, figsize=(15,8)) 
In [3]: plt.yticks(range(6), 
                   ["\n".join(
                              [" ".join(i.split("~")[:-1]),
                              "\n".join(i.split("~")[-1].split(" "))])
                   for i in a.index])

barh

使用以下方法,您可以获得更多的空间:

  • 缩小字体大小
  • 放大图片
  • 将文本分成不同行:

.

"\n".join([

" ".join(i.split("~")[:-1]), # everything before the "~" () actually [0] but since the 4th line has no "~", I put all but last to avoid redundancy.

"\n".join(i.split("~")[-1].split(" ")) # here line break every word.

])

希望这能帮到你,如果有问题请不要犹豫。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接